具有模型关联的 Geocoder near 方法
Geocoder near method with model associations
我正在尝试从地理编码器 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
哪个 returns 那个餐厅对象,并且可以进一步执行 m.restaurant.address
为地理编码器 near 方法提供地址工作,所以我不确定如何解决这个问题。
编辑代码:
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
如果我们查找方法 self.search_for_menus(params) 这有助于搜索菜单
在您正在使用的方法中
Menu.where("dish LIKE ?", "%#{params[:dish]}%")
您正在使用 where 查询结果为您提供记录数组,并且您正在尝试根据菜单查找关联的餐厅
无法在多条记录上找到关联仅在单条记录中有效。
如果您确保查询总是 return 第 1 个结果,那么您可以试试这个
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%").first if params[:dish].present?
menus= menus.restaurants.near(params[:location],2) if params[:location].present?
如果 "menus" 中的记录有多个,则尝试在菜单的每个记录中循环
喜欢:
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
找到解决方案,它需要连接父模型和反向地理编码
reverse_geocoded_by "restaurants.latitude", "restaurants.longitude"
def self.search_for_menus(params)
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%") if params[:dish].present?
menus= menus.joins(:restaurant).near(params[:location],2)
menus
end
我正在尝试从地理编码器 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
哪个 returns 那个餐厅对象,并且可以进一步执行 m.restaurant.address
为地理编码器 near 方法提供地址工作,所以我不确定如何解决这个问题。
编辑代码:
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
如果我们查找方法 self.search_for_menus(params) 这有助于搜索菜单
在您正在使用的方法中
Menu.where("dish LIKE ?", "%#{params[:dish]}%")
您正在使用 where 查询结果为您提供记录数组,并且您正在尝试根据菜单查找关联的餐厅
无法在多条记录上找到关联仅在单条记录中有效。
如果您确保查询总是 return 第 1 个结果,那么您可以试试这个
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%").first if params[:dish].present?
menus= menus.restaurants.near(params[:location],2) if params[:location].present?
如果 "menus" 中的记录有多个,则尝试在菜单的每个记录中循环
喜欢:
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
找到解决方案,它需要连接父模型和反向地理编码
reverse_geocoded_by "restaurants.latitude", "restaurants.longitude"
def self.search_for_menus(params)
menus=Menu.where("dish LIKE ?", "%#{params[:dish]}%") if params[:dish].present?
menus= menus.joins(:restaurant).near(params[:location],2)
menus
end