我有投票和投票表格的投票。我可以在投票和投票模式中驗證唯一性,以確保用戶不能投票或投票超過一次。我想驗證這兩種模式的獨特性,以便用戶不會投票選出他們已經投票過的帖子,反之亦然。我試過了下面定義的自定義驗證,userfaved,但它不起作用。Rails - 驗證基於另一個表的唯一性
class Vote < ActiveRecord::Base
validates_uniqueness_of :user_id, :scope => :article_id #allows only one vote
validate :userfaved
def userfaved
if Votedown.where(:user_id => :user_id, :artcle_id => :article_id).any?
errors.add(:user_id, 'already voted on this')
end
end
class Votedown < ActiveRecord::Base
validates_uniqueness_of :user_id, :scope => :article_id #allows only one votedown
validate :userfaved
def userfaved
if Vote.where(:user_id=> :user_id, :article_id => :article_id).any?
errors.add(:user_id, 'already voted on this')
end
end
我知道這已經有一段時間了,因爲你問了這個問題,但我想知道爲什麼你不只是使用一張表代表投票類型的列(上或下)?這將消除您對複雜驗證的需求。你只需要像你已經完成的那樣驗證':user_id,:scope =>:article_id'的唯一性。 – 2013-08-30 02:15:36