Могу ли я проверить действительность одного свойства DataMapper? - PullRequest
1 голос
/ 29 февраля 2012

В пользовательском установщике DataMapper я хотел бы проверить, является ли значение, которое я устанавливаю, действительным или нет.

Например:

class ToastMitten
  include DataMapper::Resource

  property :id, Serial
  property :wearer, Enum['Chuck Norris', 'Jon Skeet']
  property :first_worn_at, DateTime

  def wearer=(name)
    super
    if wearer.valid? # How can I do this?
      first_worn_at = Time.now
    end
  end

end

t = ToastMitten.new
t.wearer = 'Nathan Long' # invalid value; do NOT set first_worn_at
t.wearer = 'Jon Skeet'   # valid value; set first_worn_at

Могу ли я проверить достоверность одного свойства , например, без вызова valid? для самого объекта и просмотра всех ошибок?

1 Ответ

2 голосов
/ 10 апреля 2012

Я пытаюсь понять это сам, вот лучшее решение, которое я нашел до сих пор:

Пока я не нашел метод проверки допустимости отдельного свойства, как в:

t.wearer.valid?

Я обнаружил, что вы можете проверить достоверность всего объекта перед сохранением, а затем проверить, есть ли ошибки в интересующем вас свойстве, например:

if t.valid?
  # Everything is valid.
else
  # There were errors, let's see if there were any on the 'wearer' property...
  puts t.errors.on(:wearer)
end

Я знаю, что это не обязательно тот ответ, который вы ищете, но это лучшее, что я придумал до сих пор. Я отправлю ответ, если найду что-нибудь получше.

...