Hier ist ein Teil des Codes, den ich jetzt verwende:
<%= f.select :project_id, @project_select %>
Wie ändere ich es so, dass sein Standardwert dem params[:pid]
beim Laden der Seite entspricht?
ruby-on-rails
Totocaster
quelle
quelle
Antworten:
Dies sollte es tun:
quelle
options_for_select
ist der bessere weg. Es ist für jede Situation gut, auch für die Formularbearbeitung.Verwenden Sie das richtige Attribut der aktuellen Instanz (z. B.
@work.project_id
):quelle
select_tag
. Danke, es hat mir auch sehr geholfen.options_for_select(..., f.object.project_id )
Schienen 3.0.9
quelle
value3], default
Das Problem bei all diesen Antworten ist, dass das Feld auf den Standardwert gesetzt wird, auch wenn Sie versuchen, Ihren Datensatz zu bearbeiten.
Sie müssen den Standard auf Ihren vorhandenen Wert setzen und dann nur dann auf den tatsächlichen Standardwert setzen, wenn Sie keinen Wert haben. Wie so:
Für alle, die mit
f.object.field
Ihnen nicht vertraut sind, verwenden Sie immerf.object
Ihren Feldnamen am Ende.quelle
select2
stößt, funktioniert diese Antwort auch mit dem JS-Plugin. Funktioniert perfekt, wenn Sie Datensätze mit demselben Formular erstellen oder bearbeiten und select2 verwenden, insbesondere mit Platzhaltertext.Versuche dies:
quelle
params[:pid]
nicht funktioniert, aber Ihr Beispiel hat funktioniert.Wenn params [: pid] eine Zeichenfolge ist, die Sie wahrscheinlich verwenden müssen, wenn sie aus einem Formular stammt
für das richtige Element in der Auswahlliste ausgewählt werden
quelle
@project
Variable mit einer ID aus der Datenbanktabelle anstelle eines Titels gefüllt hatte , wurde dieser Code auf der Rückseite desform.select
Helfers angehängt :selected: @project
Danke @danengleIch habe eine Lösung gefunden und festgestellt, dass ich in RoR ziemlich unerfahren bin.
Fügen Sie in dem Controller, der die oben beschriebene Ansicht verwaltet, Folgendes hinzu:
quelle
quelle
Ich konnte dies nicht zum Laufen bringen und stellte fest, dass ich das "ausgewählte" HTML-Attribut nicht nur dem richtigen
<option>
Tag, sondern auch dem<select>
Tag hinzufügen musste . In den MDN-Dokumenten zum ausgewählten Attribut des Auswahl-Tags heißt es:Das heißt, der Code sollte folgendermaßen aussehen:
quelle
quelle
Alternativ können Sie das Attribut: project_id im Controller festlegen, da das erste Argument von f.select dieses bestimmte Attribut abruft.
quelle
Wenn Sie versuchen, das f-Objekt zu drucken, werden Sie feststellen, dass es ein f.object gibt, das geprüft werden kann, um das ausgewählte Element zu erhalten (gilt für alle Schienen Version> 2.3).
Verwenden Sie daher das folgende Skript, um die richtige Option zu erhalten:
quelle
Es ist bereits erklärt, werde versuchen, ein Beispiel zu geben
lass die Auswahlliste sein
Der folgende Code ergibt also
Um eine Option standardmäßig auszuwählen, müssen wir selected: value verwenden .
wenn can_vote? gibt true zurück, es setzt ausgewählt: 1, dann wird der erste Wert ausgewählt, andernfalls der zweite.
Wenn die Auswahloptionen nur eine Array-Liste anstelle von hast sind, ist die Auswahl nur der Wert, der ausgewählt werden soll, z. B. wenn
Jetzt wird das ausgewählte nur noch dauern
quelle
In der obigen Antwort von Mike Bethany wurde ein Standardwert festgelegt, als ein neuer Datensatz erstellt wurde, und der vom Benutzer ausgewählte Wert wird weiterhin im Bearbeitungsformular angezeigt. Ich habe jedoch eine Modellvalidierung hinzugefügt, mit der ich das Formular nicht senden konnte. Hier ist, was für mich funktioniert hat, um eine Modellvalidierung auf dem Feld zu haben und einen Standardwert sowie den Wert anzuzeigen, den der Benutzer im Bearbeitungsmodus ausgewählt hat.
Modell Bestätigung
quelle
Dies sollte für Sie funktionieren. Es wird nur
{:value => params[:pid] }
an die Variable html_options übergeben.quelle