在 ruby 和 rails 中调用 create 和 new() 的区别

difference between calling create and new() in ruby with rails

假设我有一个 class Try。然后我试图创建它的对象以在 rspec 文件中的示例之一中使用它。

我尝试编写 let(:obj){obj = Try.new()} 然后在示例中访问它,但出现错误。然而,当我写 llet(:obj){obj = Try.create} 时,我可以使用 obj 并调用它的函数而不会出现任何错误。

我在 rspec 文件中写 Try.createTry.new() 有什么区别?

来自 ActiveRecord::Base 文档:

create(attributes = nil) {|object| ...}

如果验证通过,则创建一个对象(或多个对象)并将其保存到数据库中。无论对象是否成功保存到数据库,都会返回结果对象。

new(attributes = nil) {|self if block_given?| ...}

新对象可以实例化为空(不传递构造参数)或预先设置属性但尚未保存(传递键名与关联的 table 列名匹配的散列)。在这两种情况下,有效的属性键都由关联的 table 的列名决定——因此你不能拥有不属于 table 列的属性。 因此 create 实例化新对象,对其进行验证,然后将其保存到数据库中。并且 new 只创建本地对象,但不会尝试验证或将其保存到数据库中。