我有投票和投票表格的投票。我可以在投票和投票模式中验证唯一性,以确保用户不能投票或投票超过一次。我想验证这两种模式的独特性,以便用户不会投票选出他们已经投票过的帖子,反之亦然。我试过了下面定义的自定义验证,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