我有一个从组类继承的团队类。团队和组都通过同一个协会拥有成员资格。但是,我需要在添加了团队成员而不是组之后运行方法。我现在有这样的东西:

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

有没有什么方法可以修改团队中继承的关联,这样我就不必重新定义整个东西,而只需添加:after_add hook i t?
任何帮助都将不胜感激。

最佳答案

试试这个,如果有用的话告诉我。我应该这么想。确保您的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.p.s如果您想保持membership_check私有,可以使用gr.send(:membership_check,dev)绕过可见性约束。但我不明白你为什么要这么做。

关于ruby-on-rails - 修改继承的Rails关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3049504/

10-13 02:20