0

次のモデルがある場合:

client has_many :projects
project has_many :tasks
tasks has_many :timeentries

timeentries belongs_to :task
task belongs_to :project
project belongs_to :client

次に、次のようなモデル ステートメントが必要ですか。

timeentries belongs_to project :through => :tasks
client has_many :tasks, :through => :projects

ありがとう

4

1 に答える 1

0

簡単な答えは、そうする必要はありませんが、したくなるかもしれないということです。モデルをどのように使用するかによって少し異なります。関係の両端にアクセスできるようにしたい場合は、それが必要になる場合があります。そのため、Project に直接アクセスできるようにしTimeEntries.Projectたい場合は、それが必要になるかもしれません。喜んで通過するTimeEntries.Task.Project場合は、明示的な関係は必要ありません。これにより、問題がさらに複雑になる可能性があります。

Has_and_belongs_to_many :through に注意してください。これは、仲介テーブルを純粋に関係を表すために使用する多対多の関係がある場合に使用されるため、仲介は独自のモデルを必要としません。

これは、双方向の多対多の関係では非常に一般的です。ある種のタグ クラウドがあるとすると、次のようになります。

  Article               ArticleTag       Tag
    Id                    ArticleId        Id         
    Title                 TagId            Text
    Text

1 つの記事に多くのタグを付けることができ、1 つのタグを多くの記事に適用できるため、どちらもテーブルにバインドしたくありません。したがって、記事には ArticleTag を介して has_many のタグが含まれています。

これにより、 Rails での関連付けの簡単な要約が得られます。

于 2012-05-18T16:10:07.393 に答える