【问题标题】:Rails Ransack - How to include multiple conditions with a ransackerRails Ransack - 如何使用 ransacker 包含多个条件
【发布时间】:2014-06-14 09:58:42
【问题描述】:

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

给定:学生有_many Grades 和 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)

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

【问题讨论】:

    标签: ruby-on-rails ruby search ransack


    【解决方案1】:

    您需要建立条件分组。查看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 加入组。

    【讨论】:

    • 哇,我在源代码中挖掘了几个小时,完全错过了!我最终制作了一些笨拙的洗劫者和谓词组合,但这更干净。我真的希望有一天有深入了解 Ransack 的人写文档,这对每个人都有好处。
    【解决方案2】:

    试试这样的

    <%= 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 %>
    

    【讨论】:

    • 对不起,如果我不清楚,我们的目标是在一个表单上包含几个等级类别对,以便将它们组合成一个查询。这只会找到一对。如果 Ransack 需要对每个年级-类别对进行子查询,然后在每个结果中加入所有具有 id 的学生,这可能是不可能的。不过还是谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2021-12-29
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 1970-01-01
    相关资源
    最近更新 更多