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 加入组。
- 哇,我在源头上挖了几个小时,完全错过了!我最终制作了一些笨拙的洗劫者和谓词组合,但这更干净。我真的希望有一天能深入了解 Ransack 的人写文档,这对每个人都有好处。
试试这样的
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 %> |
- 抱歉,如果我不清楚,我们的目标是在一个表单上包含几个等级类别对,以便将它们组合成一个查询。这只会找到一对。如果 Ransack 需要对每个年级-类别对进行子查询,然后在每个结果中加入所有具有 id 的学生,这可能是不可能的。谢谢你的回答。
来源:https://www.codenong.com/23348140/