我已经从Ryan Bate的轨道演员中设置了一个简单的搜索: http://railscasts.com/episodes/37-simple-search-form
搜索结果显示后,我希望有一些链接可以对已搜索的信息进行排序。对于我的产品型号,他们按名称搜索并获得结果。我想在搜索下有类别链接,以便他们可以按类别过滤搜索结果。 控制器是直截了当的:
def index
@products = Product.search(params[:search])
#scope filtering
if params[:toys]
@products = Product.toys
end
end
我在模型中添加了范围,但不确定如何将范围和搜索的SQL语句组合在一起。
class Product < ActiveRecord::Base
scope :electronics, -> { where(category: 'electronics') }
scope :toys, -> { where(category: 'toys') }
def self.search(term)
where("name like :term", term: "%#{term}%")
end
end
视图:index.html.erb
<%= form_tag products_path, :method => 'get' do %>
<p>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", :name => nil %>
</p>
<% end %>
<%= link_to 'Electronics', products_path(:electonrics => true) %> | <%= link_to 'Toys', products_path(:toy => true) %>
基本上当我搜索表单时会转到localhost:3000 / products?utf8 =✓&amp; search = foo 获得foo的所有结果。然后,当我在搜索后单击过滤器时,我需要某种加入或联合来进行搜索localhost:3000 / products?utf8 =✓&amp; search = foo&amp; category = toys。
如果在用户搜索某个字段后有一种更简单的按类别排序的方法,我确信我和其他人在轨道上学习ruby会感谢看到一种更加红宝石的方法来解决问题。
答案 0 :(得分:0)
您可以在控制器中执行此操作:
def index
@products = Product.all
@products = Product.search(params[:search]) unless params[:search].blank?
@products = @products.toys unless params[:toys].blank?
end
现在您正在通过@products = Product.toys
重置列表。