2011-07-07 13 views
0

My Railsアプリケーションでは、2つの異なるタイプの顧客があるSTIを使用します。 1つは個人顧客であり、もう1つは会社顧客です。同じ名前でも別のモデルから継承したSTIモデル

私のPeopleコントローラでは、顧客をインスタンス化する必要があります。 (したがって、Personのtype属性はCustomerです)。

My Customerモデルは、Personモデルから継承します。モデルファイル名はcustomer.rbと呼ばれています。私の会社のコントローラでは、customer.rbを再度使用するCustomerをインスタンス化しますが、Personから継承しているため動作しません。

同じモデルをどのように使用できますか?各モデルは別のモデルから継承する必要がありますか?

#models/customer.rb 
class Customer < Person 
end 

#models/customer.rb 
class Customer < Company 
end 

私はcustomer.rbを別のディレクトリに移動しようとしました。人/、会社/それが正しいかどうかわかりません。モジュールを使うべきでしょうか?

答えて

1

これは動作しません。同じ名前の2つの異なるクラスを持つことはできず、クラスは2つのクラスから継承できません。

おそらく、CustomerとPerson/Companyの間に多相関連を使用できます。

class Person 
    has_many :customers, :as => :customer_entity 
end 

class Company 
    has_many :customers, :as => :customer_entity 
end 

class Customer 
    belongs_to :customer_entity, :polymorphic => true 
end 
0

、これは動作しません理由は、あなたが与えた例では、顧客のための2番目のクラス定義は人からあなたが望むものではない会社への継承を変更するということです。

多態性の提案がうまくいかない場合は、CustomerPersonとCustomerCompanyという2つのクラスを作成し、より一般的な機能をモジュールに抽出して含める/拡張する方法もあります各クラスに追加します。

関連する問題