2012-04-23 15 views
0

私はRuby 1.9.3 on Rails 3.2.2アプリケーションを持っていますが、型を含める必要があるhas_many関連をいくつか扱っています。例:Railsの型クラス

  • ユーザーは多くの航空機を持っています。航空機はある種のものである(Cessna 172)。
  • ユーザーには多くのライセンスがあります。ライセンスは特定のタイプ(プライベートパイロットライセンス)のものです。
  • ライセンスにhas_manyの評価があります。格付けは特定の種類(単一エンジンピストンクラス格)です。

私の問題は、これらすべてのクラスに名前を付けることです。現在、ユーザーの関連付けはAircraft,LicenseRatingとなりますが、依然としてタイプクラスの名前を付ける必要があります。私は当初、AircraftTypeLicenseTypeRatingTypeと名付けましたが、これは私には匂いがしました。

今私は私のタイプのクラスは今Types::AircraftTypes::LicenseTypes::Ratingを命名された専用モジュールTypes内のすべてのこれらのタイプのクラスを、持っていますが、私はこれは私が疑問サポートのために与えられた道のトラブルに向かっているかどうかわからないですRailsの名前空間は、私が聞いています。

この種の問題には、規則または標準的な慣行がありますか?

更新:

航空機の種類のリストを定期的に更新されたため、私はこれらをデータベースにする必要があります。ライセンスタイプとレーティングは頻繁に変更されませんが、追加、変更、削除が必要な場合は、データベースに登録することをお勧めします。クラスそのものに静的に定義されているこの種のルール。

答えて

2

モデルに密接に関連付けられているため、型をクラスメソッドとしてモデルに入れることができます。以下のような何か:

class Aircraft < ActiveRecord::Base 
    def self.XTypes 
    ['Cessna 172','Cessna 152','Boeing 747'] 
    end 
end 

ジャストレールが単一テーブル継承のため、実際には「タイプ」はでも、属性名を維持するためにいいだろう、危険かもしれませんが、ことを予約しているように、「タイプ」を使用していませんDRYerコードの可能性を少なくとも開いているタイプを持つすべてのモデルで同じですが、XTypesを持つすべてのモデル間でコードを共有する可能性があります。たとえば、モデルのselect要素を作成するビューヘルパーXTypeを持つ。

<%= f.select 'xtype', Aircraft.XTypes %> 

XTypesのリストが大きく、彼らは改訂/追加/削除にあるやすいが、あなたはおそらくそれらを置くことを検討する必要があります。

ので、一般的に、あなたはこのようにXTypesを使用したいですモデルを分離し、has_one関係でそれらを結びつけますが、それらがかなり静的であれば、上記のアプローチはおそらく大丈夫でしょう。

UPDATE:

私はシングルテーブル継承はどちらかというか、単純なhas_oneの関係、チケットかもしれないと思います。しかし、あなたが単一のエンティティにすべてのこれらのタイプを凝縮したいように聞こえるので、あなたがしたいことがありSTI

class mytype < ActiveRecord::Base; end 
class AircraftType < mytype; end 
class LicenseType < mytype; end 
あなたは自分のMYTYPEモデルに「タイプ」と呼ばれる文字列の属性を追加し、でそれを記入する必要が

値は 'AircraftType'または 'LicenseType'です。あなたは航空機を編集していた場合

<%= f.select 'type', LicenceType.all().map {|t|, [t.id, t.description] } 

:今、あなたはあなたのタイプのすべてを収容することができます一つのモデル、ライセンスレコードを編集している、とあなたはLicenseTypesのselect要素をしたい場合つまり、あなたが行うことができますがあります。

<%= f.select 'type', AircraftType.all().map {|t|, [t.id, t.description] } 

これは、ベースMYTYPEモデルは、高速応答の属性「説明」

+0

こんにちはブラッド、感謝を持っていると仮定し!私の謝罪、おそらく私はより明確にすべきだった。私はこれらのタイプがデータベースに存在する必要があります。それは変更の対象となります(航空機のタイプは他のタイプよりも多いためです)。私は元の質問を更新しました – Laurens

+0

OK、私の回答を更新します – RadBrad

+0

Bradに感謝します!ちょうどそれを稼働させ、私のソリューションにこれを非常に好む、素晴らしい作品です! – Laurens

関連する問題