Rails新对象是零

我再次玩rails并发现这种行为,当我创建一个具有某些属性的Post模型的新实例时,它告诉我所有属性都是零,为什么会发生?

Loading development environment (Rails 4.0.0) 2.0.0-p451 :001 > a = Post.new(title: "Rails", content: "Rails Post") => # 2.0.0-p451 :002 > a.title => "Rails" 2.0.0-p451 :004 > a.content => "Rails Post" 2.0.0-p451 :005 > a.inspect => "#" 2.0.0-p451 :006 > a.errors.messages => {} 2.0.0-p451 :007 > a.valid? => true class Post < ActiveRecord::Base attr_accessor :title, :content, :author, :rating end 

您正在为所有属性定义attr_accessor ,这是一个快捷方式,用于为同名的实例变量定义getter和setter,如下所示:

 def content @content end def content=(new_content) @content = new_content end 

对于模型具有的每个数据库字段,Rails还将使用这些名称自动生成方法。 这些方法会相互冲突。

当你调用post.content = 'foo' ,不是调用Rails生成的方法,而是在内部将模型的content属性设置为’foo’,而是调用attr_accessor方法,该方法将实例变量@content设置为“富”。

inspect的输出迭代Rails定义的模型属性,而不是实例变量。

你真的attr_accessible这些属性声明为attr_accessible而不是attr_accessor吗?