2011-01-30 10 views
2

私はクラステーブル継承宝石(https://github.com/brunofrank/class)を使用するために既存のRailsアプリケーションの一部を修正しています型継承)。私のスーパークラス - Personには、すべてのサブクラスがアクセスできる必要があるいくつかのインスタンスメソッドを定義したことを除いて、すべてうまくいっています。たとえば、姓と名が連結されたfull_name、または最初の姓と名字を返すcite_nameが返されます。 CTIの宝石は実際にはRubyの継承を使用していない(すべてのサブクラスはまだActiveRecord :: Baseから継承しており、宝石はActiveRecordのフィールドを一緒にリンクするためのいくつかのファンドを行います)、私はサブクラスでこれらのメソッドにアクセスできません作成した。これを回避するためのあらゆる考え?私はSTIに興味はありませんが、このCTI宝石をフォークしたり、ハックしたり、他のソリューションを見ていきたいと思います。ちょうど私の頭の上からRailsクラステーブル継承宝石、擬似継承、欠落メソッド

答えて

1

try http://peterhamilton.github.com/citier、それはCITIEsForRAILSに基づいています。私は&を急いで開発し、さまざまな変更を加えました。それは、それが持っていたすべてのバグではないにしてもほとんどを修正し、簡単に動作します。

+0

そして、どのように乗っているのか教えてください。他の人の経験を知りたいです! –

0

、あなたのサブクラスの移行テーブルにあなたが行を持っている必要があることを見ました:あなたの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 

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

+0

oops。 create_table:books、... – horseshoe7

0

私は新しいCITIEsForRAILS gem(クラス継承&テーブル継承埋め込みはRAILSのため、https://github.com/altrabio/CITIEsForRAILSを参照してください)はあなたが望むものを正確に行うと思います。この宝石は、CTI、STI、&マルチテーブル継承を継承しながら、Rubyクラスの継承を維持します。