使用保存的数据构建一个搜索表单

时间:2013-04-24 15:33:26

标签: ruby-on-rails ransack

我将搜索数据保存在数据库中,以哈希的形式保存:

{"name_cont"=>"an", "c"=>{"1366814870748"=>{"a"=>{"0"=>{"name"=>"gender"}}, "p"=>"eq", "v"=>{"0"=>{"value"=>"female"}}}, "1366814890125"=>{"a"=>{"0"=>{"name"=>"shoe_size"}}, "p"=>"gt", "v"=>{"0"=>{"value"=>"2"}}}}}

然后我从中创建一个搜索表单:

@search = Sedcard.search hash
<%= search_form_for @search %>

如何根据类似于railscasts中提供的表单对象来迭代条件来创建选择?

1 个答案:

答案 0 :(得分:0)

最后,我设法找到了正确的代码。这是在ransack演示示例中:

这个例子有点复杂,因为第一个字段(名称的搜索字段)显示在别处,它是静态的,因此不需要显示两次。并且ransack附加了一个没有预先选择的最后一个空过滤器,因此我也过滤了它。

            = f.condition_fields do |c|
              %div
                - render_attribute = true
                = c.attribute_fields do |a|
                  - regular_for_nondisplay = /\<option value=\"name\" selected\=\"selected\"\>Name\<\/option\>/
                  - regular_for_checking_not_empty = /selected=\"selected\"/
                  - filter_name = a.attribute_select
                  - if filter_name =~ regular_for_nondisplay || filter_name !~ regular_for_checking_not_empty
                    - render_attribute = false
                    -
                  - else
                    = filter_name
                  -

                - if render_attribute
                  = c.predicate_select 
                  = c.value_fields do |v|
                    = v.text_field :value
                  = link_to t('.remove'), '#', class: 'remove-fields btn-a btn-error'