如何在rails_for_select中列出rails中的项目?

时间:2013-12-15 11:43:37

标签: ruby-on-rails ruby select drop-down-menu ruby-on-rails-4

我正在使用rails 4,我想在选择下拉菜单中列出类别。我怎样才能做到这一点?我的表格看起来像这样:

<%= f.select (:category_id), 
    options_for_select([ 
      ["Maths", 1],
      ["Physics", 2]
    ]) 
%> 

但当然,内容必须是来自数据库的动态,所以我尝试了以下内容:

options_for_select([ 
  @categories.each do |c|
    [c.title, c.id]
  end
]) 

但如果我尝试在其#<Category:randomdigetshere>之外获得相同的输出,则输出options_for_select,并且标题/ ID将按原样显示。

这样做的正确方法是什么?

3 个答案:

答案 0 :(得分:3)

你可以做到

<% categories_array = Category.all.map { |category| [category.title, category.id] } %>
<%= options_for_select(categories_array) %>

<%= options_from_collection_for_select(Category.all, :id, :title) %>

您可以使用collection_select

缩短时间

答案 1 :(得分:1)

假设您的@categories格式为:

 @categories = Category.all

你可以这样做:

options_for_select(@categories.map { |category| [category.title, category.id] })

答案 2 :(得分:1)

我无法告诉你我有多少次看过这种情况,胖子在我周围寻找。这是我对它的看法,其中包括:

  • 选择下拉列表中显示的默认文本
  • 对合并first_name和last_name属性的实例的方法调用
  • sets:已选中,因此在编辑时可用
  • 设置一个类(对simple_form集成很有用)

select_tag(:doctor_id,options_for_select([“选择医生”] + @ doctors.map {| doctor | [doctor.full_name,doctor.id]} ,: selected =&gt;:doctor_id),:class =&gt; '形式控制')

请记住,这需要包含在输出标记中,即&lt;%=和%&gt;

options_for_select做的是将数组和格式与所选属性等一起用于原生html选项标记格式。这里发生的是我们使用标题为“选择医生”的元素初始化数组,然后我们追加到一组看起来像[“Bob Smith”,1]

的项目