Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails异常验证唯一性_Ruby On Rails - Fatal编程技术网

Ruby on rails Rails异常验证唯一性

Ruby on rails Rails异常验证唯一性,ruby-on-rails,Ruby On Rails,我想让登录我的网站的用户在一个问题上只能喜欢一次,但我也希望没有登录的人也能喜欢 目前,我有这样做,以确保登录用户只投票一次 模型 当前,如果一个用户喜欢而不登录,则会阻止未登录用户进一步喜欢。基本上,它可以防止多个yesvotes的用户id为null/nil以验证可以使用范围的多个属性: class Yesvote < ActiveRecord::Base belongs_to :user belongs_to :question validates_uniquenes

我想让登录我的网站的用户在一个问题上只能喜欢一次,但我也希望没有登录的人也能喜欢

目前,我有这样做,以确保登录用户只投票一次

模型


当前,如果一个用户喜欢而不登录,则会阻止未登录用户进一步喜欢。基本上,它可以防止多个yesvotes的用户id为null/nil

以验证可以使用范围的多个属性:

class Yesvote < ActiveRecord::Base
   belongs_to :user
   belongs_to :question
   validates_uniqueness_of :user_id, scope: :question_id
end
编辑: 如果用户id为空,则可以使用Proc跳过验证

validates_uniqueness_of :user_id, scope: :question_id, unless: Proc.new { |v| v.user_id.blank? }
这可能有助于:-

validates_uniqueness_of :user_id, :allow_blank => true, :scope => [:question_id]

:allow_blank或:allow_nil,这将分别跳过blank和nil字段上的验证。

谢谢,但这不会阻止未登录用户一起投票。我希望没有登录的人也能投票。
before_filter: authenticate_user!, only: :yesvote

def yesvote
  @question = Question.find(params[:id])        
  yesvote = Yesvote.create(yes: params[:yes], user: current_user, question: @question)      
  redirect_to :back
end
validates_uniqueness_of :user_id, scope: :question_id, unless: Proc.new { |v| v.user_id.blank? }
validates_uniqueness_of :user_id, :allow_blank => true, :scope => [:question_id]