2010-12-15 110 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