ActiveRecord 提供属性辅助方法,例如 _? 和脏"方法(_changed? 等)
ActiveRecord offers attribute helper methods such as _? and the "dirty" methods (_changed? etc.)
是否有 Rails 方法可以在非持久化或虚拟"属性上定义这些相同的方法?
Is there a Rails way to define these same methods on non-persisted or "virtual" attributes?
我希望是这样的:
class MyClass < ActiveRecord::Base some_macro :my_attribute end $ @my_class = MyClass.new $ @my_class.my_attribute? # => false $ @my_class.my_attribute_changed? # => false 推荐答案好吧,这确实是值得研究的有趣事情.显然没有直接的方法可以做到这一点......我发现了两件事
Well this was certainly something interesting to investigate. Apparently there is not a straight forward way to do this... here are two things I found
从 2009 年起
从 2011 年开始 - 加强了 2009 年的帖子但让它更干净一点.您创建一个更新属性哈希的模块.来自 Brandon Weiss 的帖子:
From 2011 - reinforces the 2009 post but makes it a bit cleaner. You create a module that updates the attribute hash. From the Brandon Weiss post:
# 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还有这个插件 此处提到,但我不确定它对您有多大用处.
There is also this plugin mentioned here but I am not sure how useful it is for you.
更多推荐
如何将 ActiveRecord 属性辅助方法添加到虚拟属性?
发布评论