这真的让我很难过。如果我使用#new
然后#save
进行处理,则此过程正常,但#create
会返回一个模型实例,其中所有字段都设置为nil
。
e.g: 出乎意料的行为:
ruby-1.9.2-p0 > EmailDefault.create(:description=>"hi")
=> #<EmailDefault id: nil, description: nil, created_at: nil, updated_at: nil>
预期行为:
ruby-1.9.2-p0 > e = EmailDefault.new
=> #<EmailDefault id: nil, description: nil, created_at: nil, updated_at: nil>
ruby-1.9.2-p0 > e.description = "hi"
=> "hi"
ruby-1.9.2-p0 > e.save
=> true
ruby-1.9.2-p0 > EmailDefault.last
=> #<EmailDefault id: 4, description: "hi", created_at: "2011-02-27 22:25:33", updated_at: "2011-02-27 22:25:33">
我做错了什么?
- update--
结果我误用了attr_accessor
。我想添加一些非数据库属性,所以我用:
attr_accessible :example_to, :cc_comments
attr_accessor :example_to, :cc_comments
答案 0 :(得分:1)
您需要使用attr_accessible将这些属性列入白名单以启用质量分配。
- 修改
默认情况下,所有属性都可用于质量分配。如果使用attr_accessible,则质量赋值仅适用于那些属性。 Attr_protected的工作方式相反,即。这些属性将受到保护,不受大规模分配。一次只能使用一个。我更喜欢使用attr_accessible的白名单。