Ruby on rails 创建模型瞬间的不同方法

Ruby on rails 创建模型瞬间的不同方法,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,以下两者之间的区别是什么: user = User.new(name: "David", occupation: "Code Artist") 及 它们不是都创造了一个新的即时用户吗?这里有一个非常重要的区别。当您将散列传递给构造函数时,rails将该散列传递给assign\u attributes方法,该方法可以对该散列进行一些处理 首先,在rails 4中,如果没有通过强属性逻辑,它可以拒绝params散列(该散列受污染,否则可以正常工作)。在rails 3中,如果至少有一个参数未标记为a

以下两者之间的区别是什么:

user = User.new(name: "David", occupation: "Code Artist")


它们不是都创造了一个新的即时用户吗?

这里有一个非常重要的区别。当您将散列传递给构造函数时,rails将该散列传递给
assign\u attributes
方法,该方法可以对该散列进行一些处理

首先,在rails 4中,如果没有通过强属性逻辑,它可以拒绝params散列(该散列受污染,否则可以正常工作)。在rails 3中,如果至少有一个参数未标记为
attr\u accessible
,它将拒绝整个哈希

此外,
assign\u attributes
可以接受表单中的复杂数据结构,它们来自表单。也就是说,它将接受诸如
date(3i)、date(2i)、date(1i)
之类的参数,并将检查模型列
date
。如果它发现它实际上是一个日期(数据库列类型),它将根据这些数据创建一个新的日期对象,并将其分配


除非直接在块代码中调用
assign\u attributes
,否则这些功能都不适用于块代码

是的,它们都创建了一个新的
User
瞬间。
user = User.new do |u|
  u.name = "David"
  u.occupation = "Code Artist"
end