ActiveRecord Transaction并返回模型的已保存ID

时间:2011-09-16 18:26:57

标签: ruby-on-rails activerecord translation

我想使用ActiveRecord事务来保存我的三个模型。我能找到一些很好的教程,比如

http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

http://ar.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

但我的问题是,我想得到我的第一个模型的id并将其保存为我的第二个模型的外键。据我所知,我不能这样做,因为在事务提交之前我无法获取保存的id。

有没有人为这个问题找到更好的解决方案或解决方法?我正在使用Rails 2.3.8。

2 个答案:

答案 0 :(得分:3)

通常,当您需要使用关系保存对象时,这意味着您应该使用accepts_nested_attributes_forSee doc here

这是迄今为止最干净,最好的方式。

答案 1 :(得分:1)

怎么样:

SomeClass.transaction do
  first_record = SomeClass.create(... vars ...)
  second_record = SomeClass.create(... vars ...)
  third_record = SomeClass.create(... vars ...)

  second_record.update_attributes(:related_id=>first_record.id)
  third_record.update_attributes(:related_id=>second_record.id)
end

这将创建对象,并在一个整体事务中分配ID。如果失败,则应回滚所有记录,包括首先创建记录。