我想使用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。
答案 0 :(得分:3)
通常,当您需要使用关系保存对象时,这意味着您应该使用accepts_nested_attributes_for
。 See 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。如果失败,则应回滚所有记录,包括首先创建记录。