Проверки атрибутов Ruby on rails, методы в модели

#ruby-on-rails #validation #attributes

#ruby-on-rails #проверка #атрибуты

Вопрос:

У меня есть типовой проект и проверяет:

 validates_presence_of :name, :position, :tel
  

У проекта также есть другие атрибуты, такие как:флаг.
Я хочу сделать так:
если вы введете:имя, :должность, :тел, то :флаг = true,
если один из этих атрибутов не указан, то :flag = false.

Как я могу это сделать и где? В модели?

Ответ №1:

То, как вы объявили эту проверку, модель даже не сохранится, если пользователь не введет все три, поэтому установка флага в false является спорной.

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

 class Project << ActiveRecord::Base
  before_save :set_flag

  protected

  def set_flag
    self.flag = (self.name.blank? || self.position.blank? || self.tel.blank?) ? false : true
  end
end
  

Комментарии:

1. И тогда вы можете установить проверку для флага … 🙂

2. Спасибо, хорошо! Но если удалить проверку для :tel, :name и:position и сделать пустым, например, атрибут :tel, почему ваш метод не работает? как я могу исправить это для модели без проверки?

3. Хорошо, какова ваша цель — какова цель флага? Зачем вам удалять проверки, если они являются допустимыми требованиями? Если вы просто хотите узнать, является ли модель допустимой или нет, предварительно сохраните, есть способы получше.

4. @Prychev, что вы имеете в виду, когда говорите, что метод не работает? Вы хотите сказать, что флаг не устанавливается? Не могли бы вы опубликовать часть своего кода, пожалуйста?