我有一个继承自Group类的Team类。团队和团队都通过同一协会拥有会员资格。但是,我需要在添加Team成员资格但不是Group之后运行方法。我现在有这样的事情:
class Group < ActiveRecord::Base
has_many :memberships,
:class_name => 'Connection',
:foreign_key => 'connectable_id',
:as => :connectable,
:dependent => :destroy
end
class Team < Group
has_many :memberships,
:class_name => 'Connection',
:foreign_key => 'connectable_id',
:as => :connectable,
:dependent => :destroy,
:after_add => :membership_check
private
def membership_check(membership)
end
end
是否有某种方法可以修改Team中的继承关联,这样我就不必重新定义整个内容,而只需添加:after_add钩子呢?
任何帮助都将不胜感激。
答案 0 :(得分:1)
试试这个,让我知道它是否有效。我应该想一想。确保您的membership_check
方法不再是私密的。
class Group < ActiveRecord::Base
has_many :memberships,
:class_name => 'Connection',
:foreign_key => 'connectable_id',
:as => :connectable,
:dependent => :destroy,
:after_add => proc {|gr, dev| gr.membership_check(dev) if gr.respond_to? :membership_check}
end
class Team < Group
def membership_check(membership)
end
end
P.S。我不确定你需要将什么传递给membership_check参数,但是增加的开发人员似乎有所作为。
P.P.S如果你想保持membership_check
私有,你可以使用gr.send(:membership_check,dev)来绕过可见性约束。但我不明白为什么你应该这样做。
答案 1 :(得分:0)
我能看到的最清楚的方法是将add_company_membership
类中的Group
定义为空方法,然后在Team
中覆盖它以实际执行您想要的操作。然后,您将:after_add
保留在Group上,然后从那里开始。
不幸的是,它不像在组类中忽略任何想法:after_add那样干净,这是理想的。
答案 2 :(得分:0)
您是否尝试过仅在子类Team中添加:after_add
挂钩?它不会在Group中被调用,因为它是超类,对吗?