【发布时间】:2014-12-03 00:34:04
【问题描述】:
这是一个非常简单的问题,但我对何时应该在控制器中使用 .new 和 .create 感到困惑。我想我真正要问的是.new 的用途是什么,.create 的用途是什么?谢谢。
【问题讨论】:
标签: ruby-on-rails
这是一个非常简单的问题,但我对何时应该在控制器中使用 .new 和 .create 感到困惑。我想我真正要问的是.new 的用途是什么,.create 的用途是什么?谢谢。
【问题讨论】:
标签: ruby-on-rails
来自ActiveRecord::Base 文档:
create(attributes = nil) {|object| ...}
如果验证通过,则创建一个对象(或多个对象)并将其保存到数据库中。无论对象是否成功保存到数据库,都会返回结果对象。
new(attributes = nil) {|self if block_given?| ...}
新对象可以实例化为空(不传递构造参数)或预先设置属性但尚未保存(传递具有与关联表列名匹配的键名的哈希)。在这两种情况下,有效的属性键都由关联表的列名决定——因此您不能拥有不属于表列的属性。
所以create 实例化新对象,对其进行验证,然后将其保存到数据库中。而new 仅创建本地对象,但不会尝试验证或将其保存到数据库。
【讨论】:
something = Something.new 然后if something.save... 或者如果你以后没有一些属性,你可以创建它然后设置更多属性,例如something.property = variable,然后是 save。只取决于你在做什么。 new 可以派上用场,但 create 可能是更常用的。