2011-07-12 27 views
3

在Rails 3,如何从哈希如何从一个哈希在轨道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 

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

感谢

+0

为什么'nil'作为'collection_select'的第一个参数? –

+0

我不知道..我从api文档阅读...和一些博客文章做这样的事情..我只是复制 – jojo

回答

7

这应该工作:

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

编辑:说明:

collection_select将调用each的对象你给(User.genders这里)和两个方法(firstlast)在每个物体上。这大致相当于是这样的:

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

当你调用each on a Hash,它产生两个值(键和值)的Array。这些值可以通过firstlast方法检索。

+0

嗨迈克尔,这是工作.....但为什么to_arry将帮助?你能解释一点点.. coz我是新来的红宝石...... – jojo

+0

其实它并不是因为哈希有一个'each'方法。我删除它并添加了一些解释。 –

+0

它为我工作,但我必须确保第一个参数(在该示例中为性别)的符号在我的模型下有一个条目:attr_accessor。谢谢您的回答... – Daniel