2015-01-22 5 views
0

Я пытаюсь получить модель для проверки уникальности столбца КОГДА два критерия выполнены - опубликовано верно, а устаревшее - false. Если любая из этих вещей противоположна, не сохраняйте модель. Прямо сейчас, похоже, это предотвращает дубликаты независимо от значений этих столбцов.RoR валидации - условия игнорируются?

У меня есть модель:

Article 
------- 
name:string 
description:string 
value:string 
value_hash:string 
published:bool 
deprecated:bool 

Вот его класс:

class Article < ActiveRecord::Base 
    belongs_to :user 
    validates_presence_of :name, :description, :value 
    validates_uniqueness_of :checksum, conditions: -> {where(published: true).where(deprecated: false)}, message: "already exists." 
    before_save :hash_article_value 

    def hash_article_value 
    self.checksum = Digest::SHA1.hexdigest(self.value) 
    end 

end 

Так что, если Джо спасает статью, и его не опубликован, то Майк сохраняет ту же статью и публикует это должно позволить Майку сделать это. Затем Джо попытается опубликовать одну и ту же статью, и это может привести к ограничению уникальности.

Проблема: Прямо сейчас, если Джо сохраняет неопубликованную статью, Майк не может опубликовать ту же самую статью (не удается ограничить уникальность).

Почему это происходит, когда я указываю условия в validates_uniqueness_of?

ответ

1

вы вычисляете checksum с помощью обратного вызова before_save, поэтому у вас есть контрольная сумма nil во время проверки. использование before_validate callback

+0

Thanks! Это то, что я сделал. – Jeff