2016-04-19 5 views
2

Я использую жемчужину Smart listing для фильтрации в реальном времени. Ниже представлена ​​простая форма без представления и URL-адреса.Rails - передать несколько значений флажков через параметры

<%= smart_listing_controls_for(:search) do %> 
    <%= simple_form_for :search do |f| %> 
    <%= f.input :certificates, collection: Certificate.all, :as => :check_boxes, include_hidden: false, :input_html => {:multiple => true} %> 
    <% end> 
<% end> 

Приведенный выше код генерирует несколько флажков с «Идентификатор сертификата как значения». Как только один из флажков установлен, интеллектуальный список отправляет запрос контроллеру с параметрами.

Parameters: {"utf8"=>"✓", "search_smart_listing"=>{"_"=>"1", "page"=>"", "per_page"=>"10"}, "authenticity_token"=>"z25rULU5JeeWcEZdpsy0+bz7OJFDWPmXrVGnzPvdG0cjM0ufpc3ydB9+5GywDQkUmcm6RGJnF0C4Yrd0sWpJ6g==", "search"=>{ "certificates"=>["6"]}} 

Проблема заключается в том, когда я выбираю несколько флажков, массив сертификатов только имеет самое последнее значение и не все выбранные значения чека-боксы.

Также, если флажок установлен и отменен, значение массива сертификатов в параметрах остается неизменным. Я хочу, чтобы значение было удалено из массива сертификатов в параметрах, если флажок снят, и только массив массивов сертификатов должен иметь только все выбранные флажки.

Ниже приведен код html, сгенерированный для одного из нескольких флажков.

<span class="checkbox"> 
    <label for="search_certificates_5"> 
    <input class="check_boxes required" type="checkbox" value="5" name="search[certificates][]" id="search_certificates_5"> 
    Certificate 1 
    </label> 
</span> 

Заранее спасибо :)

ответ

3

Так как smart_listing_controls_for и simple_form_for создать форму, одна проблема, которая может иметь то, что вы создаете форму внутри формы, и это и не рекомендуется, ни стандарт , Это может привести к неожиданным результатам.

Может попробовать сделать это без simple_form помощника , что-то вроде этого (предполагая, что Certificate имеет атрибут описания):

<%= smart_listing_controls_for(:search) do %> 
    <%= Certificate.all.each do |certificate| %> 
    <div class="checkbox"> 
     <label class= "checkbox inline"> 
     <%= check_box_tag 'search[certificates][]', certificate.id %> 
     <%= certificate.description %> 
     </label> 
    </div> 
    <% end %> 
<% end %> 

Update

Кроме того, есть проблема с текущей версией (v1.1.2) умный листинг драгоценный камень, который не позволяет работать с входами массива. Проблема заключается в этой части javascript code. Это фиксируется в текущей ведущей ветке и недавно обновлялось в последнем фиксаторе, как вы можете видеть here.

Для решения использовать последний коммит в вашем Gemfile так:

gem 'smart_listing', :git => 'https://github.com/Sology/smart_listing.git', :ref => '79adeba' 

bundle install после обновления Gemfile и попробуйте приведенный выше код еще раз.

+0

Спасибо Рориго за ответ. Но это не сработало. Тот же вопрос, что и раньше. Только одно значение в массиве сертификатов. Вот парамеры после удаления простой формы: 'Параметры: {" utf8 "=>" ✓ "," search_smart_listing "=> {" _ "=>" 1 "," page "=>" "," per_page "= > "10"}, "search" => {"certificates" => ["6"]}} ' – Mahendhar

+0

@Mahendhar Я обновил свой ответ. Вы все равно должны использовать 1 форму, но также есть проблема с текущей версией. Проверьте мой ответ. –

+0

Большое спасибо @Rodrigo, он работает! – Mahendhar