添加到has_many关联并使用activerecord回调

时间:2013-05-06 00:47:35

标签: ruby-on-rails activerecord transactions

我有2个型号,Foo和Bar。 Foo has_many酒吧。我正试图在我的Foo模型中执行以下操作

add_bar?(blah)
  bar = Bar.new
  bar.foo = self
  bars << bar
  save
end

before_save do
  #stuff involving bars that could potentially cause a rollback
end

这不起作用,因为将栏添加到栏中会保存它,我希望只有在保存Foo时才会创建栏。

我看到了someone suggest using a transaction并抢救了ActiveRecord :: RecordInvalid异常。但是,保存!抛出其他类型的异常,我认为我不想捕获每个异常,因为这会掩盖我想要显示的问题。

我也试过在Bar的模型中说

before_create { foo.save }

但这并不像我想的那样有效。即使保存返回false,它也添加了对象。无论如何,这似乎是一种奇怪的方式。

做这样的事情的正常方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用

foo.bars.build

初始化属于bar

foo