我正在尝试为父模型和子模型实现类似于 Reddit 的投票功能(链接和评论,但在我的情况下,对于问题,哪个has_many
答案)。
投票功能目前在对问题进行投票时效果很好,但是在回答问题时,用户只能为给定问题出现的一个答案投票,而不能为任何后续问题投票(不像 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
通过保证用户只能为一个问题投票一次,验证适用于问题,但由于我在问题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