安全地覆盖ActiveRecord中的保存方法?

at.*_*at. 2 activerecord ruby-on-rails ruby-on-rails-3 active-record-query ruby-on-rails-3.2

在扩展的特定类中ActiveRecord::Base,我需要在创建此对象时更新不同的ActiveRecord对象.覆盖save方法并在保存中执行以下操作是否安全?

def save
  super
  other = self.other
  other.name = self.name
  other.save!
end
Run Code Online (Sandbox Code Playgroud)

我担心潜在的交易相关问题.我假设这将是1个事务,如果任何部分失败,一切都回滚?

Ste*_*ill 14

您是否有特殊原因不使用为此目的提供的钩子?

你有after_create,after_save,after_update,before_create,before_save,before_update-和一堆别人的.其中一个不适合吗?

实际上,根据你所说的,它听起来就像before_save你想要的那样,因为你可以捕获在保存第二个模型时发生的任何错误并防止第一个模型被保存(通过从before_save调用中返回false ).