2010-12-15 244 views
0

这里是我的情况:我有两个ActiveRecord的模式:最佳实践

class SomeAction < ActiveRecord::Base 
    has_one :moderation 
end 

class Moderation < ActiveRecord::Base 
    belongs_to :some_action 
end 

我想适度更新SomeAction的状态属性为“完成”时,我救适度与它相关。如果由于某种原因SomeAction的更新不成功,我希望适度不保存。我知道我应该在before_save回调中这样做,但是返回false(在意识到SomeAction记录不可更新后)将不会ROLLBACK一切。任何IDE

回答

2

你想用:自动保存,它会自动验证FO ryou关联的模型。在activerecord/lib/active_record/autosave_association.rb

class SomeAction < ActiveRecord::Base 
    has_one :moderation 
end 

class Moderation < ActiveRecord::Base 
    belongs_to :some_action, :autosave => true 

    before_validation do |moderation| 
    moderation.some_action.complete # Changes state 
    end 

    # autosave kicks in and validates the associated record 
    # If validation for some_action fails, the error messages will be pulled up in Moderation 
end 

更多信息,或Rails documentation

1

确保您的表支持的交易(即MySQL的InnoDB的),然后执行以下操作:

class Moderation < ActiveRecord::Base 
    belongs_to :some_action 

    def do_save 
    transaction do 
     some_action.status = 'complete' 
     some_action.save! 
     save! 
    end 
    end 

end