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]