2017-06-27 2 views
2

Ich habe eine Rails App und Ruby 2.3.3.Rails Parsen Ransack Parameter mit dem Senden

Für meine Formulare verwende ich simple_form, Ransack für die Filterung und will_paginate.

Ich habe 'set_per_page' Dropdown, so dass Benutzer auswählen können, wenn die 20, 200 oder 200 Beiträge in der Tabelle sehen möchten.

= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do 
    =select_tag :per_page, otions_for_select([20,200,2000], params[:per_page].to_i) 

Meine Javascript ist wie folgt:

$(document).ready(function() { 
    $("#per_page").change(function() { 
    $("#post_index").submit(); 
    }); 
}); 

Also, wenn ein Benutzer auf das Drop-Down ändert, wird es die Aktion ‚Index‘ wieder machen und setzt den per_page Parameter auf den gewählten Wert. Soweit so gut, aber wenn ich die Ransack-Parameter einreiche, sind die weg.

Wenn ich mit Ransack filtern, ist die URL:

http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar 

Wenn ich die 'per_page' Drop-Down wählen, wird meine URL werden:

http://localhost:3001/posts?per_page=200 

Wie kann ich die Parameter des parsen Ransack call, in den per_page Aufruf. Also muss ich eine URL wie folgt aus:

http://localhost:3001/posts?q[name_eq]=Foo&q[title_eq]=Bar&per_page=200 

Edit:

Ich versuchte, die Ransack Parameter in einem versteckten Feld wie folgt hinzuzufügen:

= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do 
    =select_tag :per_page, otions_for_select([20,200,2000], params[:per_page].to_i) 
    =hidden_field_tag :q, params[:q] if params[:q].present? 

Aber dies führt zu einem Fehler:

undefined method `merge' for "#<ActionController::Parameters:0x175c6110>":String 

Antwort

2

Sie müssen hidden_tag hinzufügen Form plündern und aktualisieren seinen Wert und legt auf Änderung

versteckt Tag zu Ihrer Form hinzufügen:

= semantic_search_form_for(@q) do |f| 
    ... 
    = f.hidden_field :per_page, value: params[:q][:per_page] || 20 
    ... 

Platz mit per_page wählen überall:

= select_tag :per_page, options_for_select(["20", "200", "2000"], params[:q][:per_page]) 

hinzufügen Skript:

javascript: 
$('#per_page').on('change', function() { 
    $('#q_per_page').val(this.value); 
    $('#search').submit(); 
}); 
+0

Das könnte eine Option sein, aber ich habe ein Layout, wo die Ransack fil tering ist in einem Modal.Das Drop-down-Menü "per_page" befindet sich direkt über der Tabelle. Ich weiß, dass es irgendwie funktionieren muss, dass ich das Layout nicht ändern muss, damit es funktioniert. – Jerry

+0

Machen Sie eine Bearbeitung zu beantworten –

+0

Jetzt bekomme ich es! Nett! Wird meine Frage mit dem anwser aktualisieren. Vielen Dank! – Jerry

1

Mit Michael Malov Antwort ich diese erstellt:

Innerhalb der Ran Sack Suchformular Ich fügte hinzu:

= search_form_for @q do |f| 
    = f.hidden_field :per_page, value: @per_page 

Das Javascript ist jetzt:

$('#per_page').on('change', function() { 
    $('#q_per_page').val(this.value); 
    $('#search').submit(); 
}); 

Die Drop-Down ist jetzt:

= form_tag({ action: "index"}, { method: "get", id: "post_index"}) do 
    =select_tag :per_page, otions_for_select([20,200,2000], @per_page) 

Innerhalb der Controller ich habe:

@per_page = params[:q].present? ? params[:q][:per_page] : 20