modelの:throughってなに?

PHPばかりじゃなんなのでちょこちょこRailsやらObjective-Cやらを学習してる訳なのですが
Rails2.0の足回りと中級者への道をやってて
ちょっとつまずいたのでメモ

モデルの:throughってなんですか?

こんな感じで使われているのですが、何の用途なのかさっぱりです。

class Link < ActiveRecord::Base
  has_many :assorts
  has_many :tags, :through=>:assorts
  belongs_to :user
end

こことかでなんとなーく用途がわかってきましたがまだ文にできない状態です。

Rails2.0の足回りと中級者への道の筆者さんからコメントをいただきました。

has_many :throughは多対多の関係の際に使うものなのですね。

作者さんのコメントをもう消化してみる。

以下の関係で説明してくれた。

リンク1:http://www.google.co.jp/
タグ:search web

リンク2:http://www.yahoo.co.jp/
タグ:portal search

...リンクと、タグの関係を「分類作業 assorts」テーブルで管理...

これを図で表すとこのような感じになるのかな
links

id url
1 http://www.google.co.jp/
2 http://www.yahoo.co.jp/

tags

id name
1 search
2 web
3 portal

assorts

id link_id tag_id
1 1 1
2 1 2
3 3 1
4 3 3

:throughの自分なりの解釈

以下のようにモデルが定義してある場合

class Link < ActiveRecord::Base
  has_many :assorts
  has_many :tags, :through=>:assorts
  belongs_to :user
end

linkデータはassortsテーブルに複数あるよ
linkのtagデータもassortsに一緒に持ってるよ
この場合:throughってのはlinkと関係するtagはlinksテーブルをスルーしてassortsで管理してるよ。
ってことかな。

筆者の鎌田さんありがとうございます。

Rails勉強するモチベーションがあがりました!
Rails2.0の足回りと中級者への道」をやり通してRails中級者になるぞー