Ruby on rails 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 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

我想知道的是,既然在用户模型中没有定义
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