使用rails

时间:2015-06-13 07:32:26

标签: ruby-on-rails rspec

假设我有一个班级Try。然后我尝试创建其对象以在rspec文件中的一个示例中使用它。

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

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

1 个答案:

答案 0 :(得分:3)

来自ActiveRecord::Base文档:

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

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

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

可以将新对象实例化为空(传递无构造参数)或使用属性预先设置但尚未保存(传递具有与关联表列名匹配的键名的哈希)。在这两种情况下,有效的属性键由关联表的列名确定 - 因此您不能拥有不属于表列的属性。 因此,create实例化新对象,验证它,然后将其保存到数据库中。 new只创建本地对象,但不会尝试验证或将其保存到DB。