我有一个聚合属性,我希望能够询问它的_changed吗?等等。
composed_of :range,
:class_name => 'Range',
:mapping => [ %w(range_begin begin), %w(range_end end)],
:allow_nil => true
如果我使用聚合:
foo.range = 1..10
这就是我得到的:
foo.range # => 1..10
foo.range_changed? # NoMethodError
foo.range_was # ditto
foo.changed # ['range_begin', 'range_end']
所以基本上,我没有在聚合属性上获得ActiveRecord :: Dirty semanitcs。有没有办法做到这一点?我对alias_attribute_with_dirty等运气不太好。
答案 0 :(得分:0)
您没有获得ActiveRecord :: Dirty语义,因为聚合属性不是关联代理,仅仅是您实际属性的包装 - 这就是您无法通过它们访问ActiveRecords的原因。
请注意,foo.range_begin_changed?
应工作,因此您可以尝试查看是否可以使用foo.class#method_missing
(例如,在要包含的模块中定义)来自动映射{ {1}},*_was
等方法调用*_changed?
的实际属性。