親モデルと子モデルの両方に対して、Redditと同様の投票機能を実装しようとしています(リンクとコメントですが、私の場合は質問にhas_many
回答します)。
投票機能は現在、質問に投票するときに正常に機能しますが、回答に関しては、ユーザーは特定の質問に表示される1つの回答にのみ投票でき、後続の質問には投票できません(SOとは異なり、多くの質問に投票できます)。あなたが望むように答えます..)
私は自分の問題が自分のVote.rb
ファイルにあることを確認しました(コメントアウトすると機能します..)。これは次のように表示されます。
class Vote < ActiveRecord::Base
attr_accessible :question_id, :answer_id, :up # up is a boolean used for voting
belongs_to :user
belongs_to :question
belongs_to :answer
validates :user_id, :uniqueness => { :scope => :question_id } #this line causes the issue..
end
検証は、ユーザーが質問に1回しか投票できないことを保証することで質問に対して機能しますが、質問のshow
ページに回答を表示しているので、 user_id
/question_id
一意性ルールがanswer_idsに対しても機能するのを妨げているというのが私の勘です。可能であれば、最初に検証answer_id
/user_id
一意性、次に質問/ユーザーのペアになるように検証を構成できるかどうか疑問に思いました。ただし、そのロジックが正しいかどうかはわかりませんが、機能します。
ご協力いただきありがとうございます!
補足資料として、これが私のコントローラーです。
class VotesController < ApplicationController
def create
@vote = Vote.where(params[:vote].slice(:question_id, :answer_id).merge(:user_id => current_user.id)).first
if @vote
@vote.up = params[:vote][:up]
@vote.save
else
@vote = current_user.votes.create(params[:vote])
end
redirect_to :back
end
end