私は投稿用の投票テーブルと投票テーブルを持っています。私は、ユーザーが投票を1回以上断ったり、投票を断ったりすることを確実にするため、投票の中で一意性を検証し、投票したモデルを検証することができます。私は、両方のモデルの間で一意性を検証して、ユーザーが既に投票した投稿を投票できないようにしたい、またはその逆をしたいと思います。 Iveは以下のように定義された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
あなたがこれを尋ねて以来、しばらくお待ちしていますが、投票の種類(上または下)を表す列で1つの表を使用していないのはなぜですか?複雑な検証が不要になります。すでに行ったように ':user_id、:scope =>:article_id'の一意性だけを検証する必要があります。 –