rails mass assignment的默认行为是什么

时间:2011-10-23 14:39:23

标签: ruby-on-rails

在rails 3.1下如果我创建一个全新的rails项目,并支持这样的新资源:

rails g scaffold User name:string email:string

默认情况下,创建操作将如下所示:

def create
  @user = User.new(params[:user])
  respond_to do |format|
    if @user.save
      ...
    else
      ...
    end
  end
end

我想知道的是,由于User模型中没有定义attr_accessible,如果我将表单发布到此操作,为什么这个创建会起作用。由于attr_accessible将允许质量分配,但这里的默认值是什么?

1 个答案:

答案 0 :(得分:3)

Rails中的默认值是允许对任何数据库属性进行质量分配,您无需在attr_accessible的上下文中定义该名称和电子邮件字符串,以便能够进行批量分配。

现在,如果您希望定义可以被分配的属性的白名单,attr_accessible非常有用,如果定义了attr_accessible,那么 attr_accessible中的属性将被批量分配。

同样,attr_protected用于定义不能在批量分配中使用的属性的黑名单。

除非你定义这些属性,否则这些都不会发生,这就是为什么没有attr_accessible你的代码工作正常的原因。我个人认为黑名单方法的白名单方法仅仅因为它更加安全。虽然您的应用程序在没有attr_accessible的情况下工作,但最后建议您使用它们作为安全预防措施。