Ransack - 分组使用或组合

时间:2015-09-02 09:39:32

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

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

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

WHERE condition_x =" xxxx" AND condition_y =" yyyy" AND(website_present OR 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字段,我也无法想办法。

希望你能帮助我

由于

1 个答案:

答案 0 :(得分: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")