Как проверить один атрибут для отправки ActiveRecord вместо всех его атрибутов? - PullRequest
1 голос
/ 20 марта 2011

Я использую Ruby on Rails 3 и хотел бы проверить один атрибут для отправляющего ActiveRecord вместо всех его атрибутов.

Например, в моей модели:

validates :firstname, :presence => true, ...
validates :lastname,  :presence => true, ...

Я бы хотел запустить проверку на :firstname и на :lastname отдельно . Возможно ли это?Если да, то как я могу это сделать?


PS: я знаю, что для целей проверки существуют такие методы, как «validates_presence_of», «validates_confirmation_of», ..., но я бы хотелиспользуйте только приведенный выше код.

Ответы [ 3 ]

1 голос
/ 20 марта 2011
class Model < ActiveRecord::Base  
  def save(*attrs)
    Model.validates :firstname, :presence => true if attrs.empty? || attrs.include?( :firstname )
    Model.validates :lastname,  :presence => true if attrs.empty? || attrs.include?( :lastname )
    ...
    super
  end
end

m = Model.new
m.save
#=> false
m.save(nil) # same as save(false), you can use both of them
#=> true
m = Model.new :firstname => "Putty"
m.save
#=> false
m.save(:firstname, :lastname)
#=> false
m.save(:firstname)
#=> true
1 голос
/ 20 марта 2011

Вы можете установить виртуальный атрибут в вашей модели, а затем выполнить условную проверку в зависимости от этого атрибута.

Вы можете найти скринкаст об этом в http://railscasts.com/episodes/41-conditional-validations

0 голосов
/ 20 марта 2011

Вы можете просто удалить вторую строку вашего кода выше, так что она гласит:

validates :firstname, :presence => true

Проверка не будет выполняться для: фамилии.

С уважением

Robin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...