在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将允许质量分配,但这里的默认值是什么?
答案 0 :(得分:3)
Rails中的默认值是允许对任何数据库属性进行质量分配,您无需在attr_accessible的上下文中定义该名称和电子邮件字符串,以便能够进行批量分配。
现在,如果您希望定义可以被分配的属性的白名单,attr_accessible非常有用,如果定义了attr_accessible,那么仅 attr_accessible中的属性将被批量分配。
同样,attr_protected用于定义不能在批量分配中使用的属性的黑名单。
除非你定义这些属性,否则这些都不会发生,这就是为什么没有attr_accessible你的代码工作正常的原因。我个人认为黑名单方法的白名单方法仅仅因为它更加安全。虽然您的应用程序在没有attr_accessible的情况下工作,但最后建议您使用它们作为安全预防措施。