2011-07-30 29 views
0

Ruby on Railsでこの小さなアプリケーションを構築しています。 このアプリでは、次のモデルを使いこなすことができます。これは、それが最高の練習であるかどうかわかりません。 (私は実際にJava開発者です)Ruby on Railsのクラス継承

私はスーパークラスとしてそれを使用する人クラスがあり、その人クラスからスタッフクラスと顧客クラスが継承されています。これを達成するために、私は持っています:

class Person < ActiveRecord::Base 
end 

class Staff < ActiveRecord::Base 
    belongs_to :person, :polymorphic => true, :dependent => :destroy 
end 

class CreateStaffs < ActiveRecord::Migration 
    def self.up 
    create_table :staffs do |t| 
     t.references :person, :polymorphic => true, :null => false 
     .... 

最初に、私はうまくいきましたが、私は最高のことをやっていますか?

私がやろうとしているのは、人物とスタッフオブジェクトを作成してリンクするフォームを作成することです。そして、私は単一のフォーム上に2つのモデルを持つことに固執しています。 誰かに提案がありますか?

あなたがここに何をやっているおかげで、 ケビン・レン

答えて

1

はスタッフのスーパークラスとして人を使用することはありませんが、あなたはそれらの間の関係を作成します。代わりに単一テーブルの継承を調べたいとします。あなたはRailsが与えられたレコードが属するモデルを把握するために使用するあなたのPersonテーブルに「タイプ」フィールドを持っている必要がありますまた

class Person < ActiveRecord::Base 
end 

Class Staff < Person 
end 

:あなたは、本質的にこれをしたいです。詳細はdocs for ActiveRecordをご覧ください。

+0

ありがとうharald、私は提案したモデルに基づいて1つの質問があります。スタッフのユーザー名フィールドがあるとします。 Staffは実際にPersonテーブルに入っているので、Personがユーザ名フィールドにアクセスするのを防ぐにはどうすればよいですか? –

+0

@ケビン、あなたは別の質問としてこれを尋ねることをお勧めします。多分もっと多くの人々がそれを見て答えます。あなたの唯一の選択肢は、バリデーションを使うこと、またはアクセスメソッド( 'Person.username'と' Person.username = ')をオーバーライドすることだと思います。以下はSTIに関する素晴らしい記事です:http://code.alexreisner.com/articles/single -table-inheritance-in-rails.html – harald

+0

ありがとう@harald、次回は別の質問をすることを忘れないでください。 –