关于 ruby??:Rails Ransack – 如何使用 ransacker 包含多个条件

Rails Ransack - How to include multiple conditions with a ransacker

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

给定:学生有_许多成绩和成绩所属_类别

我想要一个表单部分,例如:
生物学等级大于 [2]
数学成绩高于 [ 3 ]

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

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


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

遗憾的是 Ransack 没有全面的文档。我花了一整天的时间试图让类似的功能发挥作用。

试试这样的:

1
2
3
4
5
6
<%= 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
2
3
4
5
6
7
8
9
10
11
<%= search_form_for @search do |f| %>
 
    Grade greater than
    <%= f.text_field :grades_value_gteq %>
 
 
    Grade category is
    <%= f.text_field :grades_category_eq #change this eventually to a collection dropdown %>  
 
  <%= f.submit"Search" %>
<% end %>