我试图通过geocoder gem使用与另一个模型相关联的模型来获取near方法。我有2个模型餐厅和菜单,菜单属于餐厅。我在每个模型中都有一个带有搜索方法的表单,near方法适用于我的餐馆模型
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=Menu.find(11)
然后m.restaurant
返回该餐馆对象,并且可以进一步m.restaurant.address
,它为地理编码器附近的地址提供工作方式,所以我&# 39;我不知道如何解决这个问题。
编辑代码:
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
答案 0 :(得分:2)
找到解决方案,它需要父模型和反向地理编码的连接
parseInt()
答案 1 :(得分:1)
如果我们查看Method self.search_for_menus(params)哪些对搜索菜单有帮助
在方法内使用
Menu.where("dish LIKE ?", "%#{params[:dish]}%")
您正在使用where查询哪个结果为您提供记录数组,并且您正在尝试根据菜单找到关联的餐馆
它无法在多个记录中找到关联只能在单个记录中工作。
如果您确保查询将始终返回1结果,那么您可以尝试此
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%").first if params[:dish].present?
menus= menus.restaurants.near(params[:location],2) if params[:location].present?
如果“菜单”中的记录是多个,那么尝试在每个菜单记录中进行循环
像:
rest_menus = []
menus.each do |menu|
restaurant_location = menu.restaurants.near(params[:location],2) if params[:location].present?
rest_menus << restaurant_location if restaurant_location.present?
end