为什么调用create作为类方法而不保存记录?

时间:2009-07-07 21:28:00

标签: ruby-on-rails activerecord

假设一个简单的ActiveRecord模型对应于只有两列idname的表:

class Model < ActiveRecord::Base
  def self.my_create(name)
    create(:name => name)
  end
end

如果我致电Model.my_create,则会创建并保存记录:

>> Model.my_create('foo')
=> #<Model id: 1, name: "foo">

但如果我直接拨打Model.create,则记录已保存:

>> Model.create(:name => 'bar')
=> #<Model id: nil, name: "bar">

为什么在类方法中调用create与将作为类方法直接调用它有不同的行为?

1 个答案:

答案 0 :(得分:3)

Model.create(...)对我来说很好。

使用Model.create!可能值得使用,如果出现验证错误,这可能是导致未保存记录的原因,或者您可以检查返回实例上的errors,则会引发异常。我之前被Model.create咬了,因为它让你不得不检查对象是否被保存以及出于什么原因。