0

このスクリーンキャストで、 Ryan Bates はレピュテーション システムをゼロから実装する方法を示しました。しかし、current_user に 1 票だけを与え、ユーザーが既にアプリケーションに投票したかどうかを確認し、もしそうなら、投票の可能性を制限する方法はありますか?

user.rbのこのようなものはうまくいくはずだと思いますが、正確に書く方法がわかりません

   def has_one_vote
      Restrict amount of user votes to 1
   end

ありがとう

4

1 に答える 1

1

ユーザー、投票、投稿があり、ユーザーが投稿に投票すると仮定します。

にスコープさVoteれた、属性のクラスに一意性バリデーターを追加する必要があります。これにより、ユーザーが特定の投稿に対して持つことができる投票数が1つに制限されます。user_idpost_id

class Vote
  belongs_to :user
  belongs_to :post

  validates :user_id, uniquness: { scope: :post_id }
end

ユーザーが作成できる投票の総数を制限するには、一意性バリデーターからを削除するか、(より正確には)外部キーをテーブルに移動します。scopeusers

つまり、次のいずれかです。

class Vote
  belongs_to :user
  belongs_to :post
  validates :user_id, uniquness: true
end

またはこれ:

class User
  belongs_to :vote
end
于 2012-09-04T13:45:46.387 に答える