我在使用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字段,我也无法想办法。
希望你能帮助我
由于
答案 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")