【问题标题】:Rails class-table inheritance gem, faux-inheritance, and missing methodsRails 类表继承 gem、伪继承和缺失方法
【发布时间】:2011-01-30 04:23:38
【问题描述】:

我正在修改现有 Rails 应用程序的一部分以使用 Class-Table-Inheritance gem (https://github.com/brunofrank/class-table-inheritance)。一切都很好,除了我在我的超类中定义了一些实例方法——Person,所有子类都需要能够访问这些方法。例如,full_name,它返回连接的名字和姓氏,或cite_name,它返回第一个名字和姓氏。由于 CTI gem 实际上并没有使用 Ruby 继承(所有子类仍然从 ActiveRecord::Base 继承,并且 gem 做了一些时髦的巫术来将 ActiveRecord 字段链接在一起),我无法在我拥有的子类中访问这些方法创建的。关于解决这个问题的任何想法?我对 STI 不感兴趣,但我愿意分叉和破解这个特定的 CTI gem,或者查看其他解决方案。

【问题讨论】:

    标签: ruby-on-rails ruby class-table-inheritance


    【解决方案1】:

    试试http://peterhamilton.github.com/citier,它基于CITIEsForRAILS,我将它分叉并通过快速开发和其他各种变化。它修复了大部分(如果不是全部)它所拥有的错误,并且工作如此简单。

    【讨论】:

    • 请告诉我你的进展如何,很想知道其他人的经历!
    【解决方案2】:

    就在我的脑海中,你有没有看到在你的子类的迁移表中你需要有一行:

    create_table :videos, :inherits => :product do |t|
    

    也在你的 Model.rb 文件中

      class Product < ActiveRecord::Base
        acts_as_superclass # I'm guessing you might be missing this line??
      end
    
      class Book < ActiveRecord::Base
        inherits_from :product
      end
    

    【讨论】:

      【解决方案3】:

      我认为全新的 CITIEsForRAILS gem(Class Inheritance & Table Inheritance EmbeddingS For RAILS,参见https://github.com/altrabio/CITIEsForRAILS)完全符合您的要求。这个 gem 扩展了 CTI、STI 和多表继承,同时保留了 Ruby 类继承。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-29
        • 2011-03-03
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-25
        • 2011-08-29
        相关资源
        最近更新 更多