ActiveRecord提供属性辅助方法,例如_?
和“脏”方法(_changed?
等)。
是否有Rails方法在非持久或“虚拟”属性上定义这些相同的方法?
我希望有类似的东西:
class MyClass < ActiveRecord::Base
some_macro :my_attribute
end
$ @my_class = MyClass.new
$ @my_class.my_attribute? # => false
$ @my_class.my_attribute_changed? # => false
答案 0 :(得分:1)
这当然是调查有趣的事情。显然没有直接的方法来做到这一点......这里有两件我发现的事情
From 2011 - reinforces the 2009 post但让它更清洁一点。您创建一个更新属性哈希的模块。来自Brandon Weiss的帖子:
# app/models/dirty_associations.rb
module DirtyAssociations
attr_accessor :dirty
def make_dirty(record)
self.dirty = true
end
def changed?
dirty || super
end
end
# app/models/lolrus.rb
class Lolrus
include DirtyAssociations
has_and_belongs_to_many :buckets,
:after_add => :make_dirty,
:after_remove => :make_dirty
end
还有这个插件mentioned here,但我不确定它对你有多大用处。