我正在尝试为我们的搜索页面创建一个 Ransack 部分,该部分将查看学生的成绩表并在每种成绩的范围内找到学生。
给定:Student has_many Grades and Grade belongs_to Category
我想要一个像这样的表单部分: 生物学等级大于 [ 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 没有全面的文档。我花了一整天的时间来尝试使类似的功能发挥作用。
尝试这样的事情:
<%= 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 加入组。
关于ruby-on-rails - Rails Ransack - 如何在 ransacker 中包含多个条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23348140/