我在排版的顶部有一排城市。我还有一个带有类别列表的侧边栏。在此布局中呈现的视图中,我想查询具有类别和位置字段的模型的结果,基于选择的城市以及最近单击的类别。
我无法找到最佳方法。我想我希望城市按钮的功能类似于单选按钮,这样当单击某个类别时,它仍然使用最后选择的位置来查询结果。我也不确定如何将点击按钮的值传递给Offers模型的搜索功能:
def self.search(query, query2, query3)
where("title like ?", "%#{query}%").
where("category = ?", "%#{query2}%").
where("city = ?", "%#{query3}%")
end
这是为我完成大型项目的最后一步,任何帮助都将不胜感激。如果所有其他方法都失败了,我最终会在类别和位置上使用两个下拉列表,但我真的很想让它工作。
答案 0 :(得分:0)
<强>路由强>
您基本上需要定义一个route
来处理这个问题 - 允许您通过链接传递一系列parameters
到您的控制器,允许您带回由链接
无论您是通过简单HTTP
还是Javascript
处理此问题,都是相同的过程link > controller > response
我会这样做:
#config/routes.rb
resources :offers do
collection do
get :search
end
end
这将允许您按如下方式创建链接:
<% @cities.each do |city| %>
<%= link_to city.name, offers_search_path(city: city.name) %>
<% end %>
这应创建链接:domain.com/offers/search?city=scarborough
-
<强>控制器强>
当你有一个类似上面的链接时,你的控制器将能够处理city
param,允许你按如下方式执行条件搜索:
#app/controllers/offers_controller.rb
Class OffersController < ApplicationController
def search
@result = Offer.search params[:city] #-> considering you want to use a class method
end
end
-
<强>的Ajax 强>
如果您想通过ajax执行搜索,除了您将该链接作为remote
个处理之外,您执行以上所有操作:
<%= link_to city.name, offers_search_path(city: city.name), remote: true %>
这将向您的控制器发送一个ajaxified请求,您可以按如下方式处理:
#app/controllers/offers_controller.rb
Class OffersController < ApplicationController
respond_to :js, :json, :html
def search
@result = Offer.search params[:city]
respond_with @result
end
end