0

我正在尝试为父模型和子模型实现类似于 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
4

0 回答 0