1

カスタム 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?オブジェクト自体を呼び出してすべてのエラーを調べずに、このような単一のプロパティの有効性を確認できますか?

4

1 に答える 1

2

私はこれを自分で理解しようとしています.これが私がこれまでに見つけた最良の解決策です:

次のように、単一のプロパティの有効性を確認する方法は見つかりませんでした。

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

それが必ずしもあなたが求めている答えではないことはわかっていますが、これは私がこれまでに思いついた中で最高のものです. 良いものを見つけたらまた投稿します。

于 2012-04-09T23:00:22.630 に答える