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中級者になるぞー