2010-07-25 57 views
0

另一個question詢問屬性,但我想將問題擴展到關聯。Rails ActiveRecord:記錄進入特定狀態時鎖定特定關聯

說我有一個簡單的博客模式

class Discussion < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :discussion 
end 

討論有一個#closed?布爾狀態。我想阻止全部切入點以在一個已結束的討論中添加更多評論。例如,

discussion.comments << Comment.new 
discussion.comments.create(:text => 'Something') 

和可能存在的任何其他...

感謝,

-Jason

回答

0

嘗試增加驗證方法Comment型號:

class Comment < ActiveRecord::Base 
    belongs_to :discussion 

    def validate 
    errors.add_to_base("Discussion is closed!") if discussion.closed? && new_record? 
    end 
end 

這種驗證將阻止添加新的評論給討論,但是將允許在已經結束的討論中編輯現有評論。