Как мне остановить другие проверки для проверки, когда атрибут отсутствует: присутствует в Rails? - PullRequest
2 голосов
/ 26 августа 2011

Что я сейчас делаю, так это:

validates :new_pass,
          :presence => {:if => :new_record?},
          :confirmation => {:if => :password_not_blank?},
          :length => {:within => 6...64, :if => :password_not_blank?}

def password_not_blank?
  !new_pass.blank?
end

Но это не СУХОЙ, держу пари, есть способ пропустить проверки, если атрибут отсутствует.

Кроме того, не существует метода DSL для проверки? Я думаю, что это будет чище, чем реализация логики внутри хешей ...

- Правка, спасибо ^^ -

Вот что я получил сейчас:

validates :new_pass,
          :allow_blank => {:on => :update},
          :presence => {:on => :create},
          :confirmation => true,
          :length => {:within => 6...64}

И только для записи, и поэтому никто не беспокоится (?), Это виртуальный атрибут, фактический пароль шифруется с помощью before_save, проверяя, что: new_pass не пуст.

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Флаг :allow_nil для validates может представлять интерес.Примерно так должно работать:

validates :new_pass,
          :allow_nil => true,
          :presence => {:if => :new_record?},
          :confirmation => {:if => :password_not_blank?},
          :length => {:within => 6...64, :if => :password_not_blank?}
0 голосов
/ 26 августа 2011
validates :new_pass,:presence => true ,:if => :new_record?
validates :confirmation ,:length =>:within => 6...64, :if => :password_not_blank?
...