我是学习Rails的新手,但我目前对attr_accessible
的理解是,它使类的属性在类范围之外可用。
但是,在不生成属性attr_accessible
的情况下,我可以在Rails控制台的helper方法参数中访问该属性。
'005 > Todo.create(:todo_item => "Pay internet bill")
(0.1ms) begin transaction
SQL (0.6ms) INSERT INTO "todos" ("created_at", "todo_item", "updated_at") VALUES (?, ?, ?) [["created_at", Sat, 18 Aug 2012 09:55:33 UTC +00:00], ["todo_item", "Pay internet bill"], ["updated_at", Sat, 18 Aug 2012 09:55:33 UTC +00:00]]
(339.1ms) commit transaction
=> #<Todo id: 6, todo_item: "Pay internet bill", created_at: "2012-08-18 09:55
然而,在控制器操作中做同样的事情:
def add
Todo.create(:todo_item => params[:todo_text])
redirect_to :action => 'index'
end
在模型中,我需要指定
attr_accessible :todo_item
为什么这个属性可以在Rails控制台中访问,而不能在控制器方法中访问?
ActiveRecord根据数据库模式自动创建属性。这是一个表面上类似于但独立于核心Ruby的attr_accessor
系统的系统。
在内部,他们没有任何共同点。attr_accessor
只是一个简单实例变量的包装器,但在模型实例中还有很多事情要做
对于需要临时存储但不需要存储在数据库中的内容,可以将可访问的属性添加到模型中。不过,这样做并不常见。