【问题标题】:How to add methods to a rails polymorphic association?如何将方法添加到 Rails 多态关联?
【发布时间】:2010-10-02 02:47:00
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    我不知道你会如何使用模型来做到这一点,但你可以使用 mixins 轻松添加方法:

    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
    

    【讨论】:

      【解决方案2】:

      您必须将应用于 ActiveRecord 多态关联的“多态”概念与经典 OOP 继承意义中的“多态”概念分开。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-26
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多