2016-04-19 10 views
2

Ich verwende Smart listing Edelstein für Echtzeit-Filterung. Das folgende ist ein einfaches Formular ohne eine Submit und URL.Schienen - Übergeben Sie mehrere Kontrollkästchen Werte über Parameter

<%= 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> 

Der obige Code generiert mehrere Kontrollkästchen mit 'Certificate ID' als Werte. Sobald eines der Kontrollkästchen aktiviert ist, sendet Smart Listing eine Anfrage an den Controller mit den Parametern.

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

Das Problem ist, wenn ich mehrere Kontrollkästchen wählen, hat die Zertifikate Array nur den letzten Wert und nicht alle Werte Boxen Check-ausgewählt.

Wenn ein Kontrollkästchen aktiviert und deaktiviert ist, bleibt der Array-Wert des Zertifikats in den Parametern gleich. Ich möchte, dass der Wert aus dem Array "certificates" in den Parametern entfernt wird, wenn das Kontrollkästchen deaktiviert ist und das Array "certificates" nur alle ausgewählten Kontrollkästchenwerte enthalten soll.

Der folgende Code ist der HTML-Code, der für eines der mehreren Kontrollkästchen generiert wurde.

<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> 

Vielen Dank im Voraus :)

Antwort

3

Da sowohl smart_listing_controls_for und simple_form_for erstellen Form, ein Problem, das Sie haben könnten, ist, dass Sie ein Formular in einem Formular erstellen, und das wird noch empfohlen noch Standard . Das könnte zu unerwarteten Ergebnissen führen.

Vielleicht versuchen Sie es ohne die Helfer simple_form tun, so etwas wie dieses (Certificate unter der Annahme hat eine Beschreibung Attribut):

<%= 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 %> 

aktualisieren

Außerdem gibt es ein Problem mit aktuellen Release (v1.1.2) der Smart List Edelstein, der nicht mit Array-Eingaben arbeiten erlaubt. Problem ist in diesem Teil der javascript code. Dies ist im aktuellen Master-Zweig festgelegt und wurde kürzlich beim letzten Commit aktualisiert, wie Sie sehen können here.

Um diese Anwendung zu lösen die neuesten wie dies in Ihrem Gemfile begehen:

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

bundle install nach wieder Gemfile und versuchen, den obigen Code zu aktualisieren.

+0

Danke Rodrigo für die Antwort. Aber es hat nicht funktioniert. Das gleiche Problem wie zuvor. Nur ein Wert im Zertifikats-Array. Hier sind die Parameter nach dem Entfernen der einfachen Form 'Parameter: {" Utf8 "=>" ✓ "," search_smart_listing "=> {" _ "=>" 1 "," Seite "=>" "," per_page "= > "10"}, "search" => {"certificates" => ["6"]}} ' – Mahendhar

+0

@Mahendhar Ich habe meine Antwort aktualisiert. Sie sollten immer noch 1 Formular verwenden, aber es gibt auch ein Problem mit der aktuellen Version. Überprüfe meine Antwort. –

+0

Vielen Dank @Rodrigo, es funktioniert! – Mahendhar

Verwandte Themen