2009-06-15 5 views
27

Wie verwende ich Rails, um eine Dropdown-Auswahlbox zu erstellen? Angenommen, ich habe die Abfrage ausgeführt:Dropdown-Box in Rails

Wie zeige ich dann eine Box mit allen @ roles.name's an?

EDIT: Nach der Implementierung der Dropdown-Box. Wie kann ich auf Auswahlen reagieren? Soll ich ein Formular machen?

Antwort

15

Dadurch wird ein Dropdown erstellt, das den Rollennamen in der Dropdownliste anzeigt, aber die Rolle_id als Wert verwendet, der im Formular übergeben wird.

select("person", "role_id", @roles.collect {|r| [ r.name, r.id ] }, { :include_blank => true }) 
+0

Was ich gerade posten wollte. Auch finden Sie die API-Dokumentation für die Auswahl unter http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001592 –

+0

Wie poste ich nur die ID ohne die Person [Role_id] .. Ich will nur role_id? – quantumpotato

3

Der Formularhelfer verfügt über eine Gruppe von Methoden, die speziell zum Erstellen von Dropdown-Auswahlfeldern geschrieben wurden. Normalerweise verwenden Sie die Methode select_tag, um Dropdown-Felder zu erstellen, aber in Ihrem Fall können Sie collection_select verwenden, das ein ActiveRecord-Modell verwendet und das Formular automatisch ausfüllt. Ihrer Ansicht nach:

<%= collection_select @roles %> 

Erfahren Sie mehr über die Rails Form Helfer hier: http://guides.rubyonrails.org/form_helpers.html

43

die collection_select Helfer http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001593

Das man so etwas schreiben können verwendet werden:

collection_select(:user, :role_id, @roles, :id, :role_title, {:prompt => true}) 

Und erhalten

<select name="user[role_id]"> 
    <option value="">Please select</option> 
    <option value="1" selected="selected">Administrator</option> 
    <option value="2">User</option> 
    <option value="3">Editor</option> 
</select> 
+0

Ich muss genau das tun. Wohin gehen die Namen? Regler? Wie würde das aussehen? – Ken

1

Display-Rollenname comboBox zeigt Text (1. zupfen Argument) und stellt die Rolle ID

-Controller

@roles = Role.pluck(:name, :id) 

Ansicht

<%= select("role", "role_id", @roles) %> 

params [: Rolle] [ : role_id] an den Controller aus Sicht übergeben.