关于 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 加入组。

  • 哇,我在源头上挖了几个小时,完全错过了!我最终制作了一些笨拙的洗劫者和谓词组合,但这更干净。我真的希望有一天能深入了解 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/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9715.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?