ruby-on-rails – 将模型上的所有方法调用委托给关联

我有一个具有多态关联的ActiveRecord模型:

class Reach < ActiveRecord::Base
  belongs_to :reachable, :polymorphic => true
end

这个模型像代理一样。我需要做的是将该对象上的所有方法调用转发到关联的对象:可访问。我认为委托不会在这里帮助,因为我必须明确地命名所有我需要委托的方法。我需要像委托一样的东西:all来委托所有的方法(不是所有的方法)。

最佳答案
这里有两件事可以做:

>较慢(性能方面)但更简单的方法是使用method_missing:

class Reach < ActiveRecord::Base

  def method_missing(method, *args)
    return reachable.send(method, *args) if reachable.respond_to?(method)
    super
  end
end

>执行速度更快的方法是动态定义您要委派的每个方法:

class Reach < ActiveRecord::Base

  [:all, :my, :methods, :here].each do |m|
    define_method(m) do |*args|
      reachable.send(m, *args)
    end 
  end
end

您甚至可以以更动态的方式使用该方法(如果需要),通过使用Reach类来查找在其上定义的方法,并单独定义方法,并仅定义可达到的方法。我会手工做,因为有一些你可能不想包括。

转载注明原文:ruby-on-rails – 将模型上的所有方法调用委托给关联 - 代码日志