2009-06-15 4 views
27

Как использовать Rails для создания раскрывающегося списка? Скажем, если я сделал запрос:Выпадающее поле в Rails

@roles = Role.all 

Тогда как я могу отобразить окно со всеми параметрами @ role.name?

EDIT: После внедрения раскрывающегося списка. Как я могу реагировать на выбор? Должен ли я сделать форму?

ответ

15

Это приведет к созданию раскрывающегося списка, отображающего имя роли в раскрывающемся списке, но использует role_id как значение, переданное в форме.

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

Что я собирался публиковать. Также вы можете найти документацию по API для выбора по адресу http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001592 –

+0

Как отправить только идентификатор без человека [role_id] .. Я просто хочу ROLE_ID? – quantumpotato

3

Форма helper имеет группу методов, специально написанных для создания выпадающих блоков выбора. Обычно для создания выпадающих списков используется метод select_tag, но в вашем случае вы можете использовать collection_select, который принимает модель ActiveRecord и автоматически заполняет форму. По вашему мнению:

<%= collection_select @roles %> 

Узнайте больше о форме хелперов Rails здесь: http://guides.rubyonrails.org/form_helpers.html

43

использовать помощника collection_select http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#M001593

Это позволит вам написать что-то вроде:

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

И получите

<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

Мне нужно сделать точную вещь. Куда идут имена? Контроллер? Как это будет выглядеть? – Ken

1

Отображаемое имя роли как COMBOBOX отображения текста (первый срывать аргумент) и представляет собой идентификатор роли

Контроллер

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

Вид

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

PARAMS [: роль] [ : role_id] передается контроллеру из поля зрения.

Смежные вопросы