0

내가 레일에 새로운 오전 내 첫 번째 작은 프로젝트를 진행하고Has_Many_Through & Active_Record_Collection_Proxy ERROR

내 레일 애플 리케이션의 3 개 모델을 가지고 - (식당과 직접적으로 관련이 있고, 식당은 1 개의 메뉴 만 가질 수 있습니다)

항목 < - (메뉴와 직접 관련이 있고, 메뉴가 많은 항목이 있습니다)

연결을 설정하는 데 문제가 있습니다. & 바로 문제가 해결되지 않는 것 같습니다. 다음과 같이 내 모델은 다음과 같습니다 : 나는 클래스를 호출하여 페이지에 부분 뷰를 렌더링 할 때

class Restaurant < ApplicationRecord 
    has_one :menu 
    has_many :items, through: :menus 

class Menu < ApplicationRecord 
    belongs_to :restaurant 
    has_many :items 


class Item < ApplicationRecord 
    belongs_to :menu 

나는 # 메뉴에 대한 ' "

정의되지 않은 메서드`항목을 얻을 :: ActiveRecord_Associations_CollectionProxy :

 <%= render @menus%> 
     <%= render @items %> 
: 내가으로하고있어 0x3a74d08>

MENU 부분을 성공적으로 표시했지만 항목을 표시하면 정의되지 않은 메소드 오류가 발생합니다. 나는 행운으로 연결을 조정하기 위해 많은 시간을 투자 한

def show 
    @menus = Menu.where(:restaurant_id => @restaurant.id) 
    @items = Item.where(:menu_id => @menus.id) 
    end 

:

여기 내 레스토랑 컨트롤러입니다. 고맙습니다.

+0

은 if 문에있을 수 있습니다. '@ menus'를 호출하고 있지만 특정 메뉴에 대한 항목을 가져 오기 위해 오직 하나의'@ menu' 만 호출하기를 원할 것입니다. 실제로 여러 개의 메뉴가 있다면 그 메뉴를 반복하여'menu .'의 각 인스턴스에 대해'.items '를 호출해야합니다. 이 시나리오에서'render @ items'는'render @ menu.items' 일 것입니다. 왜냐하면'@ items'이 정의되어 있지 않기 때문입니다. – user3366016

+0

@ menus를 선언하는 곳 표시 –

+0

레스토랑 컨트롤러 = def show @menus = Menu.where (: restaurant_id => @ restaurant.id) end –

답변

0

보십시오 : 대신 메뉴 : 메뉴

class Restaurant < ApplicationRecord 
    has_one :menu 
    has_many :items, through: :menu