我想覆盖我的关系中的<<
setter。例如,给定:Rails覆盖关系中的活动记录集setter
class Library < ActiveRecord::Base
has_many :groups
def readers
groups.find_by(name: 'readers').users
end
end
class Group < ActiveRecord::Base
has_many :group_memberships
has_many :users, through: :group_memberships
end
class GroupMembership < ActiveRecord::Base
belongs_to :user
belongs_to :group
end
class User < ActiveRecord::Base
has_many :groups, through :group_membership
end
我要像做
someLibrary.readers << user1
和一些额外的事情后,这种情况发生。
的代码应该是这个样子:
def <<(objects)
super objects
#do other things here
end
它应该在哪里呢?我想在Group
,如:
class Group
...
def users<<(objects)
super objects
#do stuff
end
end
,但我只是想这样做,当我在阅读器调用<<
。
我想知道是否有知道我是否在一组用户关系调用<<
的方式,或者我是否有权访问组对象的时候,我就调用用户组<<
方法通过关系。
我想这样做,因为它看起来不错。最简单的方法是定义单独的方法来设置读者(并且更加明确),但是我想知道在activerecord或ruby中是否有可能。
编辑:
是的,我知道,压倒一切的核心方法是坏事,人们去地狱的是,亚达内容十分重要。
我只是好奇它是如何完成的。就像为了学习的目的。
除了目的只是重写<<
方法在那个特定的关系,所以很可能有人可能会有一些理由为什么有人可能会这样做。
在你的'AR'版本中'someLibrary.readers.class'是什么? – mudasobwa
恕我直言,覆盖Rails方法是一个可怕的想法。你为什么不添加一个名称反映它真正做的新方法?你试图通过重写Rails核心方法来实现什么? – spickermann