Ruby on rails rails体量指定的默认行为是什么
在rails 3.1下,如果我创建一个新的rails项目,并构建一个新的资源,如下所示:Ruby on rails rails体量指定的默认行为是什么,ruby-on-rails,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 我想知道的
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
我想知道的是,既然在用户模型中没有定义
attr\u accessible
,为什么如果我将表单发布到这个操作中,这个创建会起作用。由于attr\u accessible将允许批量分配,但是这里的默认值是什么?Rails中的默认值是允许对任何数据库属性进行批量分配,因此您不需要在attr\u accessible的上下文中定义该名称和电子邮件字符串,以便它们能够进行批量分配
现在,如果您希望定义可以进行批量分配的属性的白名单,那么attr\u accessible非常有用。如果定义了attr\u accessible,那么仅attr\u accessible中的属性将进行批量分配
类似地,attr_protected用于定义不能用于批量分配的属性黑名单
除非您定义这些属性,否则这些事情都不会发生。然而,这就是为什么您的代码在没有可访问属性的情况下运行良好的原因。我个人更喜欢白名单方法而不是黑名单方法,因为它更安全。尽管您的应用程序在没有可访问属性的情况下工作,但最后,建议您无论如何使用它们作为安全预防措施。Rails中的默认设置是允许大规模分配任何数据库属性,您不需要在attr_的上下文中定义该名称和电子邮件字符串,因为attr_可访问,因此它们可以批量分配 现在,如果您希望定义可以进行批量分配的属性的白名单,那么attr\u accessible非常有用。如果定义了attr\u accessible,那么仅attr\u accessible中的属性将进行批量分配 类似地,attr_protected用于定义不能用于批量分配的属性黑名单
除非您定义这些属性,否则这些事情都不会发生。然而,这就是为什么您的代码在没有可访问属性的情况下运行良好的原因。我个人更喜欢白名单方法而不是黑名单方法,因为它更安全。虽然您的应用程序在没有attr_可访问的情况下工作,但最后,建议您使用它们作为安全预防措施。再好不过了。非常好的描述@Ken LiCouldn说得再好不过了。精彩描述@Ken Li