2017-07-07 3 views
0

Also ich möchte ein Array von Params zu einer "Tester" Route in Rails übergeben. Mein Tisch für Tester sieht derzeit wie folgt aus:So leiten Sie ein Array von Parametern in Rails

class CreateTesters < ActiveRecord::Migration[5.1] 
    def change 
    create_table :testers do |t| 
     t.integer :testerID 
     t.string :firstName 
     t.string :lastName 
     t.string :country 
     t.datetime :lastLogin 

     t.timestamps 
    end 
    end 
end 

Die URL ich so eine Anfrage an Aussehen machen wollen: http://localhost:3000/testers?tester_id[]=1&tester_id[]=2&country[]=US

Mein Server korrekt zu identifizieren, dass ich eine Reihe von params bestanden haben, aber Mein Problem ist, dass es die Route index trifft und einfach alle Tester in meiner Datenbank zurückgibt.

Wie bekomme ich entweder Rails dies als 'show' Anfrage zu erkennen, oder eine benutzerdefinierte Route für diese Art von URL erstellen?

+0

das ist nicht die traditionelle 'show'-URL, teile deine Routen –

+0

Meine Routen sind derzeit nur die Standardrouten, soll ich hier eine eigene hinzufügen? –

+0

ja .. was willst du zeigen? 2 Tester seit du 2 IDs passierst? –

Antwort

2

Wie pro Ihre Kommentare, ideal, es zu tun ist Ihre index Aktion mit sich ..

def index 
    @testers = Tester.data(params[:tester_ids]) 
end 

In Ihrem testers.rb Modell

scope :data, ->(ids) { ids.present? ? where(id: params[:tester_ids].split(',')) : all } 

und Ihre URL wird wie

aussehen

http://localhost:3000/testers für alle und

http://localhost:3000/testers?tester_ids=1,2,3 für gefilterte Tester

0

Nach Ansicht:

= link_to 'Testers', testers_path(ids: @selected_testers.pluck(:id)) 

In der Steuerung:

@testers = Tester.find(params[:ids]) 

Was mit where Gegensatz find stellt sicher, dass ein Datensatz für jede gegebene ID gibt. Wenn also eine ID 1337 als Teil des Arrays params[:ids] erscheint und kein Tester mit ID 1337 in der Datenbank vorhanden ist, wird ein Fehler ausgegeben (ähnlich wie beim Aufruf Tester.find(1337)).

Verwandte Themen