2010-12-15 10 views
0

はここに私の状況です:私は保存するときに「完全な」SomeActionのステータス属性を更新するためのモデレーションを希望ベストプラクティス

class SomeAction < ActiveRecord::Base 
    has_one :moderation 
end 

class Moderation < ActiveRecord::Base 
    belongs_to :some_action 
end 

:私は2つのActiveRecordのモデルを持っていますそれに関連する節度。何らかの理由でSomeActionへの更新が失敗した場合、節度を保存しないようにしたいと思います。私はbefore_saveコールバックでこれを行うべきだと知っていますが、SomeActionレコードが更新可能でないことを認識した後でfalseを返すと、すべてがロールバックされません。任意のIDE

答えて

2

は、あなたが使用したい:自動的亮FO関連するモデルを検証する自動保存を。 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