具有模型关联的方法附近的地理编码器

时间:2016-07-02 05:37:33

标签: ruby-on-rails ruby web-deployment rails-geocoder

我试图通过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

2 个答案:

答案 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