다른 모델과 연관된 모델로 작업하는 지오 코더 gem에서 near 메소드를 얻으려고합니다. 나는 2 개의 모델 레스토랑과 메뉴를 가지고 있고, 메뉴는 레스토랑에 속한다. 나는 각 모델의 검색 방법과 양식을 가지고 가까운 방법은 내 레스토랑 모델 I는 사용자가 입력 한 접시를 판매 사용자 근처 식당을 찾고 있어요지오 코더와 모델 연관이있는 메소드
def self.search_for(params)
restaurants = Restaurant.where(category_id: params[:category].to_i)
restaurants = restaurants.near(params[:location],2) if params[:location].present?
restaurants
end
을 작동하지만 코드 제공 아무 방법 오류없는 내 콘솔에서 (undefined method 'restaurants'
)
def self.search_for_menus(params)
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%") if params[:dish].present?
menus= menus.restaurants.near(params[:location],2) if params[:location].present?
menus
end
내가 그 레스토랑 객체를 반환 및 추가 작업 방법 근처 지오 코더의 주소를 제공 m.restaurant.address
을 할 수 m.restaurant
을 m=Menu.find(11)
을 할 수 있어요, 그래서 난 이 문제를 해결하는 방법을 모릅니다.
편집 코드 : 우리는 도움을 당신이
Menu.where("dish LIKE ?", "%#{params[:dish]}%")
를 사용하는 메뉴에게 방법 내부
를 검색하는 방법 self.search_for_menus (PARAMS)에 고개 경우
def self.search_for_menus(params)
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%") if params[:dish].present?
rest_menu = []
menus.each do |menu|
rest_menu << menu.restaurant.nearbys(params[:location],2) if params[:location].present?
end
rest_menu
end
정의되지 않은 메소드 레스토랑이 있고 메뉴에서이를 호출하기 때문에 코드가 실행될 때 메뉴가 정의되지 않았 음을 의미합니다. 어쩌면 당신의 if 조건문이 메뉴 정의 라인에서 false를 반환 할 수도 있습니다. 이것은 byebug와 같은 디버거를 사용하면 더 쉽게 해결할 수 있습니다. –