我正在尝试为我们的搜索页面创建一个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)
关于如何设置的任何想法?
答案 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 %>