2009-06-15 37 views
27

¿Cómo uso Rails para crear un cuadro de selección desplegable? Decir si he hecho la consulta:Cuadro desplegable en Rails

@roles = Role.all 

Entonces, ¿cómo se muestra un cuadro con todos los @ roles.name?

EDITAR: Después de implementar el cuadro desplegable. ¿Cómo hago para que responda a las selecciones? ¿Debo hacer un formulario?

Respuesta

15

Esto creará un menú desplegable que muestra el nombre del rol en el menú desplegable, pero usa el role_id como el valor pasado en el formulario.

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

Lo que estaba a punto de publicar. También puede encontrar la documentación de la API para seleccionar en http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001592 –

+0

¿Cómo puedo publicar solo el ID sin la persona [role_id]? Solo quiero ¿Identificación del rol? – quantumpotato

3

El asistente de formulario tiene un grupo de métodos escritos específicamente para crear cuadros de selección desplegables. Por lo general, utilizará el método select_tag para crear cuadros desplegables, pero en su caso puede usar collection_select, que toma un modelo ActiveRecord y rellena automáticamente el formulario a partir de ese. En su opinión:

<%= collection_select @roles %> 

saber más acerca de la forma de ayuda rieles aquí: http://guides.rubyonrails.org/form_helpers.html

43

los auxiliares de collection_select http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001593

Esto le permitirá escribir algo como:

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

Y obtenga

<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

Necesito hacer exactamente lo mismo. ¿A dónde van los nombres? ¿Controlador? ¿Cómo se vería eso? – Ken

1

mostrar Nombre del papel como comboBox muestra el texto (primera discusión desplumar) y representa el papel Identificación del

controlador

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

Ver

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

params [: papel] [ : role_id] pasó de la vista al controlador.

Cuestiones relacionadas