如何从rails 3中的哈希创建下拉列表

时间:2011-07-12 05:28:11

标签: ruby-on-rails-3 hash drop-down-menu

在rails 3中,如何从哈希创建下拉列表

我在User类中有以下代码

class User
  ...   other codes
  key :gender, Integer    # i use mongo db

  class << self
    def genders()
      genders = {
        '1' => 'Male',
        '2' => 'Female',
        '3' => 'Secret'
      }
    end
  end

end

在用户表单中,我正在尝试创建性别下拉列表

<%= f.collection_select nil, :gender, User.genders, :key, :value %>

但它抱怨

undefined method `merge' for :value:Symbol

那么创建下拉列表的正确方法是什么?

由于

1 个答案:

答案 0 :(得分:7)

这应该有效:

<%= f.collection_select :gender, User.genders, :first, :last %>

修改:说明:

collection_select会在您提供的对象(此处为User.genders)以及每个对象上的两个方法(firstlast)上调用each。它大致相当于这样的东西:

User.genders.each do |object|
  output << "<option value=#{object.first.inspect}>#{h object.last}</option>"
end

当您致电each on a Hash时,会产生Array两个值(键和值)。可以使用firstlast方法检索这些值。