怎么用hansack

时间:2016-02-22 10:49:16

标签: ruby-on-rails ruby-on-rails-4 ransack

好?在另外一个测试中,想学习搜索,但我说的是WTF,请看看图像:

It's a problem

重复一遍,我知道,我把Product.all放在index.html.erb中:

<%= search_form_for @q do |f| %>

  <%= f.label :name_cont, "Name" %>

  <br />

  <%= f.search_field :name_cont %>

  <br />

  <%= f.label :hd, "Brand" %>

  <br />

  <%= f.collection_check_boxes :brand, Product.all, :brand, :brand %>

  <br />

  <%= f.label :hd, "HD" %>

  <br />

  <%= f.collection_check_boxes :hd, Product.all, :hd, :hd %>

  (...)

  <%= f.submit "Search" %>

<% end %>

在控制器中就是这样:

def index
  @q = Product.ransack(params[:q])
  @products = @q.result
end

uniq_value不起作用,是错误。我希望点击搜索显示只有一个值...例如,有2 500 HD的笔记本注册,想要显示一个价值500g​​b的复选框,点击,显示两个笔记本,明白吗?谢谢!

1 个答案:

答案 0 :(得分:1)

实现这一目标的廉价而肮脏的方法是在特定字段上使用不同的选择,即:

sudo mysql -u root -p

<%= f.collection_check_boxes :brand, Product.select(:brand).distinct, :brand, :brand %>

这会产生类似<%= f.collection_check_boxes :hd, Product.select(:hd).distinct, :hd, :hd %> 的SQL查询。

如果可能的话,更简洁的方法是规范化您的数据库并创建一个名为SELECT DISTINCT brand FROM products的模型,并将产品与品牌链接,即产品属于某个品牌。