Rails Ransack - 如何使用搜索引擎包含多个条件

时间:2014-04-28 18:04:37

标签: ruby-on-rails ruby search ransack

我正在尝试为我们的搜索页面创建一个Ransack部分,该部分将查看学生的成绩表,并找到每种成绩范围内的学生。

鉴于:学生has_many等级和等级belongs_to类别

我想要一个表单部分,如: 生物等级比[2]更重 数学等级大于[3]

最终类似:SELECT... WHERE (grade.value >= 2 AND grade.category_id = 1) AND (grade.value >= 3 AND grade.category_id = 2)

关于如何设置的任何想法?

2 个答案:

答案 0 :(得分:4)

您需要构建条件分组。看看https://github.com/activerecord-hackery/ransack/blob/master/lib/ransack/helpers/form_builder.rb#L74并按照代码进行操作。 Ransack演示应用程序也是一个很好的资源。

令人遗憾的是,Ransack没有全面的文档。我花了一整天的时间来尝试做类似的功能。

尝试这样的事情:

<%= hidden_field_tag 'q[c]', 'or' %>
<% Category.each_with_index do |category, i| %>
  <%= hidden_field_tag "q[g][#{i}][m]", 'and' %>
  <%= text_field_tag "q[g][#{i}][c][0]", 'grades_value_gteq' %>
  <%= text_field_tag "q[g][#{i}][c][1]", 'grades_category_eq' %>
<% end %>

您正在Ransack内构建条件分组。在每个内部,您使用AND加入条件,然后使用OR加入组。

答案 1 :(得分:0)

尝试这样的事情

<%= search_form_for @search do |f| %>
  <div class="field">
    Grade greater than
    <%= f.text_field :grades_value_gteq %>
  </div>
  <div class="field">
    Grade category is
    <%= f.text_field :grades_category_eq #change this eventually to a collection dropdown %>   
  </div>
  <div class="actions"><%= f.submit "Search" %></div>
<% end %>