代码之家  ›  专栏  ›  技术社区  ›  Daniel Vandersluis

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

  •  1
  • Daniel Vandersluis  · 技术社区  · 15 年前

    假设一个简单的ActiveRecord模型对应一个只有两列的表, id name

    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 回复  |  直到 15 年前
        1
  •  3
  •   Shadwell    15 年前

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

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