如何使用搜查

How use ransack

好吗?在另一个测试中,想学习洗劫,但我说的是 WTF,请看图片:

都是重复的,我知道为什么,我把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 笔记本,想只显示一个值为 500gb 的复选框,然后在单击时显示两个笔记本,明白吗?谢谢!

实现此目的的一种廉价而肮脏的方法是在特定字段上使用不同的 select,即:

<%= 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 的查询。

如果可能的话,一种更简洁的方法是规范化您的数据库并创建一个名为 Brands 的模型和 link 带有品牌的产品,即产品属于一个品牌。