2

ブログモデルで簡単な評価システムをセットアップしました。カスタム メソッドを使用して、ブログ データベースの整数である評価を上げます。

def increase
  @post = Post.find(params[:id]).increment!(:rating)
  if logged_in?
    current_user.increment!(:votes)
  end
  flash[:notice] = "Thanks for rating"
  redirect_to posts_url
end

今のところ、何度でも投票できますが、これはもちろん災難の元です。ユーザーは複数回投票して、投票数を大幅に増やすことができます。

一度送信した後に投票送信ボタンが消えるようにするにはどうすればよいですか。レーティング用に別のモデルを作成し、カスタム トークンを使用することを考えましたが、シンプルなアプリには不必要に複雑に思えます。

何か助けはありますか?

センティル

4

2 に答える 2

1

これを行う 1 つの方法は、Post モデルと RatedPost モデルを用意することです。RatedPost モデルには、、、、などの情報が含まれる場合 incremented:booleandecremented:booleanありchanged_by:integer (user_id)ますpost_id:integer

RatedPost.find_by_post_id_and_changed_by(post.id, user.id)その後、レコードが返されるかどうかを識別できます。

ポイントが増加したか減少したかを特定することもできます。したがって、ユーザーが一定期間 (たとえば 24 時間) 投票を変更できるようにすることができます。

于 2010-01-23T14:13:46.633 に答える
1

特定の件名/投稿に投票したユーザーのリストを保持するか、ユーザーが投票した投稿を含む各ユーザーに添付されたリストを保持する必要があります。投稿またはユーザーと一緒に情報を保存するかどうかはあなたの選択であり、おそらくアプリケーションの要件によって異なります。

投票ボタンのあるページを表示するときは、current_userすでに投票済みかどうかを確認する必要があります。また、投票がすでに行われている場合はボタンを表示しません。安全上の理由から、ボタンを使用せずに投票することを防ぐために、ユーザーが上記のコードで投票したかどうかも確認することをお勧めします。

ログインしていない人にも投票を許可する場合は、IP アドレスなどを保存する必要があります。

于 2010-01-23T12:39:48.913 に答える