Rails 3验证,具有唯一范围条件

dam*_*ser 1 validation model ruby-on-rails-3

我在模型验证中有这样的代码:

  validates :fb_user_id, :uniqueness => {:scope => :campaign_id}
Run Code Online (Sandbox Code Playgroud)

但是campaign_id对于不同的用户,可能会发生值-1,从而引发验证异常.可以这样做吗?

 validates :fb_user_id, :uniqueness => {:scope => :campaign_id}, if :campaign_id != -1
Run Code Online (Sandbox Code Playgroud)

我可以if conditions在验证声明中加入内联,或者如果不可能,我该如何处理?

dam*_*ser 6

按照MagicMarkker的想法,我找到了一个解决方案:

validates :fb_user_id, :uniqueness => {:scope => :campaign_id}, :if => :valCampaign?

def valCampaign?
    if campaign_id == -1
        return false # skip the validation
    else 
        return true  # run the validation
    end
end
Run Code Online (Sandbox Code Playgroud)