Раскрывающийся список в Rails - PullRequest
27 голосов
/ 15 июня 2009

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

@roles = Role.all

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

РЕДАКТИРОВАТЬ: После реализации раскрывающегося списка. Как мне заставить его отвечать на выборы? Должен ли я сделать форму?

Ответы [ 4 ]

45 голосов
/ 15 июня 2009

используйте помощник 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>
15 голосов
/ 15 июня 2009

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

select("person", "role_id", @roles.collect {|r| [ r.name, r.id ] }, { :include_blank => true })
3 голосов
/ 15 июня 2009

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

<%= collection_select @roles %>

Узнайте больше о помощнике по Rails здесь: http://guides.rubyonrails.org/form_helpers.html

1 голос
/ 22 октября 2015

Отображение имени роли в виде comboBox с текстом (1-й аргумент) и идентификатором роли

Контроллер

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

View

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...