如何将方法添加到rails多态关联?

时间:2010-10-02 02:47:00

标签: ruby-on-rails class methods polymorphic-associations

所以,如果我在整个应用程序中都有多态关联,有没有办法为它添加方法?例如,如果:post,:photo和:user都与:具有名为:rankable的多态关联的排名相关联,我可以以某种方式创建方法:rankable然后将继承:post,:photo或:user?我的猜测是,如果可能的话,我需要在应用程序中添加一个Rankable模型并在其中定义方法。那可能吗?如果是这样,我在需要创建模型时是正确的,该模型将继承哪个类,或者如何将其定义为多态关系?

2 个答案:

答案 0 :(得分:3)

我不知道你是如何用模型做的,但你可以轻松地用mixin添加方法:

module RankableMethods
  def do_something_useful
    ...
  end
end

class Post < ActiveRecord::Base
  include RankableMethods
  belongs_to :rankable, :polymorphic = true
end

p = Post.new
p.respond_to?(:do_something_useful) # true

答案 1 :(得分:1)

你必须将'polymorphic'的概念与适用于ActiveRecord多态关联的概念分开,并将经典的OOP继承意义中的'polymorphic'分开。

第一种意义上的'可排列'多态类型不存在,除非作为ActiveRecord中的数据库约定,它允许一个表中的记录引用多个可能的其他表中的记录。如果你想在你的对象模型中更具体地表达这种抽象 - 第二种意义上的多态 - 你必须声明一个单独的类或模块,你的'Rankable'ActiveRecords可以混合或继承。

相关问题