2016-12-12 3 views
0

Ich baue eine Rails-App, die Musiker verfolgt. Ich möchte, dass jeder Benutzer beim Erstellen eines Profils mehrere Genres aus einem Formular auswählen kann. Ich möchte es in der "Profil" -Tabelle für den Benutzer in der Spalte "Genre" speichern. Im Moment habe ich das, aber ich kann nur EINE Option auswählen. Ich möchte, dass das Dropdown-Menü mehrere Optionen zulässt. Ist das möglich? Ich bin mir sicher, dass das sehr einfach ist.Auswählen mehrerer Zeichenfolgen mit einfachem Dropdown in Rails

<%= simple_form_for @profile do |f| %> 
<%= f.input :genre, collection:['Rock','Blues','Jazz','Classical','Soul','R&B','Alternative', 'Other'], label: "Favorite Genres" %> 

Gerade jetzt, Genre ist eine Zeichenfolge. Muss ich ein Array übergeben? Wie würde ich das tun?

Antwort

0

Es gibt zwei Dinge, die Sie tun müssen, um eine Mehrfachauswahl mit Schienen zu handhaben.

1) Erlauben dem Benutzer, mehrere Optionen auf dem Formular mit der Option {:multiple => true} auszuwählen.

<%= simple_form_for @profile do |f| %> 
<%= f.input :genre, collection:['Rock','Blues','Jazz','Classical','Soul','R&B','Alternative', 'Other'], label: "Favorite Genres", input_html: {:multiple => true} %> 

2) Lassen Sie Ihren Controller eine Reihe von params für den Wert akzeptieren.

def profile_params 

    params.require(:profile).permit(:years_spent_playing, :user_id, :name, :bio, :age, :city, :state, :primary_instrument, :second_instrument, :third_instrument, :status, :looking_for, :image, :genre => []) 

end 

Ich bin nicht sicher, dass Ihr Setup, aber ich habe das Gefühl, Sie nicht die richtigen Modelle und Verbände Setup diese im Ideal Weise zu behandeln haben. Ich schlage vor, eine has_many :through association hinzuzufügen und Ihre Genres in ein separates Modell und einen Tisch zu brechen.

+1

Möchte Verbindung statt Eingabe verwenden: https://github.com/plataformatec/simple_form#associations – Sixty4Bit

+0

@ Sixty4Bit stimme ich zu. Wenn möglich, würde ich definitiv auf eine Assoziation verweisen oder eine Sammlung direkt abfragen, anstatt sie hart zu codieren. Das OP müsste dann ein Genre-Modell erstellen und das Genre in der DB speichern. Im Controller müssten sie das: genre_ids => [] anstelle eines Arrays von Strings zulassen. – user3366016

+0

Nun, ich habe versucht, die Methode mit Strings zu machen, was ich bevorzuge. Ich habe diesen Fehler bekommen: Syntaxfehler, unerwarteter ',', erwartet => ... es => [],: jahre_spent_playing,: benutzer_id,: name,: bio,: alter, ... ...^didn ' t scheinen zu schätzen die params.require (: profile) .permit (: genre => []) part –

Verwandte Themen