在Rails中下拉框

时间:2009-06-15 12:48:50

标签: ruby-on-rails

如何使用Rails创建下拉选择框?假设我已经完成了查询:

@roles = Role.all

然后如何显示包含所有@ roles.name的框?

编辑:实施下拉框后。如何让它响应选择?我应该制作表格吗?

4 个答案:

答案 0 :(得分:45)

使用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>

答案 1 :(得分:15)

这将创建一个下拉列表,在下拉列表中显示角色名称,但使用role_id作为表单中传递的值。

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

答案 2 :(得分:3)

表单助手具有一组专门用于创建下拉选择框的方法。通常,您将使用 select_tag 方法创建下拉框,但在您的情况下,您可以使用collection_select,它采用ActiveRecord模型并自动从中填充表单。在您看来:

<%= collection_select @roles %>

在此处了解有关Rails表单助手的更多信息:http://guides.rubyonrails.org/form_helpers.html

答案 3 :(得分:1)

将角色名称显示为显示文本的comboBox(第一个pluck参数),它代表角色ID

控制器

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

查看

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

params [:role] [:role_id] 从视图传递给控制器​​。