0

パイロットの航海日誌のフライトをFlight表すクラスがあります。次の属性で構成されています。

  • 間隔
  • 着陸
  • 備考

また、私の質問に関連する空港と出発時間と到着時間の両方があります。

私は到着と出発をMovement空港と時間で構成される としてモデル化することについて考えました。Departure次に、 からとArrivalクラスを派生させ、両方Movementの参照を取得します。Flight

TrueClassその後、Ruby のand FalseClass(なぜ Ruby には単一の Boolean クラスではなく TrueClass と FalseClass があるのですか? )に関する議論に出くわしました。その要点は、Ruby はモデルtruefalseされていないということでした。Booleanなぜなら、それらは振る舞いを共有していないからです。到着と出発についても同じことが言えると思います。データを共有していますが、正反対です。

もう 1 つのオプションは、単に到着と出発のデータ フィールドを に埋め込むことFlightです。Airportモデルから出発点と到着点 ( has_many :departures, has_many :arrivals)にトラバースすると、モデルが生成されることになるため、これは厄介だと思いますFlight

私が検討した 3 番目のオプションは、 から継承せずに個別Departureの とArrivalモデルを作成することMovementです。ただし、 a にFlightは、フライトを参照するために必要な到着と出発の両方が必要なため、厄介な循環参照を作成しました (ちなみに、これは最初のオプションも悩ませています)。

この関係をどのようにモデル化するのが最善でしょうか? 私が考慮しなかった代替案はありますか?

4

2 に答える 2

1

ArrivalとDepartureで多くの機能を共有する場合は、アクティブなサポートの懸念事項または抽象的な親クラスの使用を検討してください。

継承:

class Movement < ActiveRecord::Base
  self.abstract_class = true
end

class Departure < Movement
end

モジュール:

http://www.fakingfantastic.com/2010/09/20/concerning-yourself-with-active-support-concern/

http://api.rubyonrails.org/classes/ActiveSupport/Concern.html

于 2013-01-11T18:46:35.357 に答える
1

UI 開発者の観点から言えば、これが私が始めたいことです。

あなたはしばしば2つのことをするのではないかと思います -

1) フライトをリストに表示し、リスト項目に発着情報を含める 2) リストを出発時間と到着時間でソートする

アトリビュートがフライト上にある場合、これらはより簡単に/より速く実行できます。結合を回避します。情報が必要なので、'has_one' する必要はありません。必要に応じて、後でいつでも移行できます。ユースケースが発生するまで、よりシンプルにしてください。

フライトの到着空港 ID を見るだけで、空港で has_many :arrivals (フライト タイプ) を作成するのも簡単になると思います。

于 2013-01-11T18:38:52.750 に答える