0

私の状況はこんな感じです。会社には多くのユーザーがいて、ユーザーは多くの会社に所属している場合があります。そして、現在の実装は以下のようなものです。


  class Company 
    has_many :employments
    has_many :users, :through => :employments
  end

  class Employment 
    belongs_to :company
    belongs_to :user
  end

  class User
    has_many :employments
    has_many :companies, :through => :employments  #This doesn't looks correct
  end

それは機能しますが、「ユーザーは多くの会社を持っています」は論理的に意味がありません。これは、belongs_to_many company のようなものに違いありません。has_and_belongs_to_many を使用する必要がありますか?

これらの関係を表す正しい方法を教えてください。

4

1 に答える 1

0

クラスに特別な動作を追加する予定がEmploymentなく、実際にそれを必要としない場合は、おそらくより適切に を使用する必要がありますhas_and_belongs_to_many。このようにして、 という名前のテーブルがまだいくつかありますCompanyUserが、コードにはそのようなクラスはありません。

追加: 2 つのオブジェクト間に可能な接続は、1 対 1、1 対多、多対多の 3 つだけです。Rails は、2 つのオブジェクトのどちらが外部キーを取得するかをhas_*示します。belongs_toそう:

  • 1対1:

    has_one と belongs_to が使用されます。belongs_to を持つオブジェクトは FK を取得します。

  • 1 対多:

    has_many と belongs_to が使用されます。belongs_to を持つオブジェクトは FK を取得します。

  • 多対多:

    has_many[through] または has_and_belongs_to_many が両方のオブジェクトで使用されます。誰も FK を取得せず、代わりに ConnectionTable が使用されます。

したがって、belongs_to_many のようなものはありません。これは、has_many と同じであり、同じ関係 1 対多を提供するためです。

于 2010-04-24T09:20:24.637 に答える