Как ограничить количество объектов с таким же атрибутом путем проверки при обновлении? - PullRequest
2 голосов
/ 14 августа 2011

У меня есть объект в Ruby on Rails3, который не должен существовать более трех раз с одной и той же датой. У меня нет проблем с проверкой объекта при создании, но что происходит, когда существующий объект обновляется и становится четвертым объектом дня?

Я пытался подключить валидацию в before_save, after_save, after_update и т. Д. Ни одна из них не работала ...

Спасибо, ребята!

Вот моя текущая проверка:

class Dish < ActiveRecord::Base
before_create :creation_validaton
after_save :update_validaton


def creation_validaton
  if Dish.find(:all,:conditions => ["date = ?",self.date]).count > 2
    errors.add(:date, "more than 3 a day")
    return false
  else
    return true
  end 
end

def update_validaton
   if Dish.find(:all,:conditions => ["date = ?",self.date]).count > 3
     errors.add(:date, "more than 3 a day!")
     return false 
   else
     return true
   end 
 end
end

1 Ответ

2 голосов
/ 14 августа 2011

Как-то так.Я не проверял это

class CountPerDayValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    count = record.class.where(attribute => value).count
    record.errors[attribute] << "more than  #{options[:max]} for #{attribute}" if count >= options[:max]
  end
end

class Dish < ActiveRecord::Base
  validates :date, :count_per_day => {:max => 3}
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...