我可以检查单个DataMapper属性的有效性吗?

时间:2012-02-29 17:28:10

标签: ruby ruby-datamapper

在自定义DataMapper设置器中,我想检查值I设置是否有效。

例如:

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 个答案:

答案 0 :(得分: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

我知道这不一定是你寻求的答案,但它是迄今为止我提出的最好的答案。如果我找到更好的东西,我会回复。