通过单击应用程序布局中的链接获取搜索值

时间:2014-07-05 01:38:24

标签: ruby-on-rails

我在排版的顶部有一排城市。我还有一个带有类别列表的侧边栏。在此布局中呈现的视图中,我想查询具有类别和位置字段的模型的结果,基于选择的城市以及最近单击的类别。 enter image description here

我无法找到最佳方法。我想我希望城市按钮的功能类似于单选按钮,这样当单击某个类别时,它仍然使用最后选择的位置来查询结果。我也不确定如何将点击按钮的值传递给Offers模型的搜索功能:

def self.search(query, query2, query3)
    where("title like ?", "%#{query}%").
    where("category = ?", "%#{query2}%").
    where("city = ?", "%#{query3}%")
end

这是为我完成大型项目的最后一步,任何帮助都将不胜感激。如果所有其他方法都失败了,我最终会在类别和位置上使用两个下拉列表,但我真的很想让它工作。

1 个答案:

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