为什么我仍然可以在没有attr_accessible的情况下使用rails控制台中的属性?

时间:2014-08-05 18:46:54

标签: ruby-on-rails ruby scope attr-accessible

我是学习Rails的新手,但我目前对attr_accessible的理解是,它使类的属性在类范围之外可用。

但是,如果没有创建属性attr_accessible,我可以在Rails控制台的辅助方法参数中访问该属性。

'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控制台中可以访问此属性,而不能在控制器方法中访问?

1 个答案:

答案 0 :(得分:1)

ActiveRecord根据数据库架构自动创建属性。这是一个表面上类似但独立于核心Ruby的attr_accessor系统的系统。

在内部,他们没有任何共同之处。 attr_accessor只是一个简单实例变量的包装器,但在模型实例中还有很多其他变量。

您可以为模型添加可访问的属性,以用于需要临时存储但不需要存储在数据库中的内容。不过,这是一件非常罕见的事情。