【问题标题】:Ransack - Grouping to use or combinatorRansack - 分组使用或组合器
【发布时间】:2015-09-02 09:39:32
【问题描述】:

我在使用 Ransack gem 的分组功能时遇到了一些问题。

我的搜索表单中有很多条件,我想在它们之间执行 OR,例如:

WHERE 条件_x = "xxxx" AND 条件_y = "yyyy" AND (website_present 或 eshop_present)

到目前为止,我所做的是在我的控制器中构建分组:

@q.build_grouping({:m => 'or', :website_present => "", :eshop_present => ""})

然后尝试在我的表单中显示如下:

- @q.groupings.each do |g|
  - g.conditions.each do |c|
    - c.conditions_fields do |x|
      - x.value_fields do |v|
        = v.check_box :attribute, checked: :value

而且...什么也没有发生,没有错误也没有显示。

我还尝试了许多其他方式来显示它,但没有任何效果,我找不到合适的例子来做到这一点。即使有 ransack 演示,我也无法在不添加 select_predicate 和 select_attribute 字段的情况下找到一种方法。

希望你能帮助我

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rubygems ransack


    【解决方案1】:

    问题已经很老了,我不知道它是否仍然相关,但我今天也遇到了这个问题,如果有人需要它会在这里留下答案。

    您似乎没有正确创建分组。这是帮助我的代码。

    在你的控制器中你需要建立分组:

         @q = SomeModel.search(params[:q])
         @q.build_build_grouping unless @q.groupings.any?
    

    那么在你看来:

       = search_form_for @q do |f|
         = f.label :field_a_eq, 'Field A'
         = f.text_field :field_a_eq, 'aaa'
         = f.grouping_fields do |g|
           = g.hidden_field :m, value: 'or'
           = g.label :field_b_eq, 'Field B'
           = g.text_field :field_b_eq, 'bbb'
           = g.label :field_c_gteq, 'Field C'
           = g.text_field :field_c_gteq, 'ccc'
    

    结果你应该得到这样的查询:

       WHERE field_a = "aaa" AND (field_b = "bbb" OR field_c >= "ccc")
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2021-02-04
      • 1970-01-01
      相关资源
      最近更新 更多