создание формы рансака с сохраненными данными

У меня есть данные поиска по поиску, сохраненные в БД, в виде хэша:

{"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?


person Boti    schedule 24.04.2013    source источник


Ответы (1)


В конце концов мне удалось найти правильный код. Это было в демо-примере 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'
person Boti    schedule 01.05.2013