0

だから私はninja_hovercrafts(ninja_idとhovercraft_idを格納する)を介して多くのホバークラフトを持っている忍者モデルを持っています。

この種の配置は、連想テーブルが2つの異なるクラスをバインドするのに十分な情報のみを格納するように設定する必要があることを理解しています。

ただし、連想テーブルを使用して、アプリケーションで非常に合理化された承認ハブとして機能させたいと思います。したがって、このテーブルの「役割」フィールドを介して、このバインディングによって忍者が特定のホバークラフトのパイロットまたは副操縦士になるかどうかをシステムに通知したいと思います。

私の質問は次のとおりです。

  1. これは醜いですか?

  2. これは正常ですか?

  3. レールに組み込まれているメソッドは、その役割で忍者とホバークラフトの関連付けを自動的に作成するのに役立ちますか?たとえば、ninjas_hovercraftsのロールフィールドも満たされるように、忍者とhcsの両方を作成するためのネストされたフォームを作成できますか?

  4. この方法でアプリケーションの役割を管理するのが得策ではない場合、リソースを大量に消費する代替手段は何ですか(私のアプリは、過度の結合や包含などのスケーラビリティの問題を回避するように設計されています)

ありがとうございました

4

1 に答える 1

0

これはあなたの質問に完全には答えないかもしれませんが、ホバークラフトの役割が 2 つしかない場合は、代わりにこのような関連付けを設定します

class Hovercraft < ActiveRecord::Base
  belongs_to :pilot, :class_name => 'Ninja', :foreign_key => 'pilot_id'
  belongs_to :copilot, :class_name => 'Ninja', :foreign_key => 'copilot_id'
end

class Ninja < ActiveRecord::Base
  has_many :pilotings, :class_name => 'Hovercraft', :foreign_key => 'pilot_id'
  has_many :copilotings, :class_name => 'Hovercraft', :foreign_key => 'copilot_id'
end

それよりも多くのロールがある場合、またはより柔軟性が必要な場合は、3 番目のモデルを使用してそれらをリンクすることができます。

class Hovercraft < ActiveRecord::Base
  has_many :hovercraft_roles
  has_many :ninjas, :through => :hovercraft_roles
end

class HovercraftRole < ActiveRecord::Base
  belongs_to :hovercraft
  belongs_to :ninja
end

class Ninja < ActiveRecord::Base
  has_many :hovercraft_roles
  has_many :hovercrafts, :through => :hovercraft_roles
end

HovercraftRoleそれが「パイロット」または「副操縦士」であるかどうかを示すために、モデルのロール属性を使用します。

于 2010-04-12T05:12:32.403 に答える