回答編集履歴

1 追記

tkmtmkt

tkmtmkt score 1625

2017/05/03 20:33  投稿

> has_many や belongs_to は、テーブル間の関係性を表すもので、実際にテーブル間を繋げるのは外部キーによってである。  
 
「モデル間の関係性を定義するもの」と考えたほうが適切な気がします。  
 
 
> user.rb に has_many :micropostsっと書けるのは、micropostsテーブルにuser_idカラムがあるから?
逆に、microposts.rb に belongs_to :user と書いているが、usersテーブルにmicroposts_idカラムなんてないけど。。。。
has_many、belongs_to は関連モデルにアクセスするメソッドを定義するための記述と考えればよいです。
* user.rb に has_many ⇒ user.micropostsのメソッドを使用できるようにする
* microposts.rb に belongs_to ⇒ micropost.userのメソッドを使用できるようにする
どちらもテーブルからデータを取得する際にはどちらも micropostsテーブルのuser_idカラムを使用します。
どちらもテーブルからデータを取得する際にはどちらも micropostsテーブルのuser_idカラムを使用します。
**【補足】**
外部キーについてはとりあえず以下の解釈でよいと思います。
* テーブルは「主キー」を持つ
* 関連する他のテーブルの主キーを指す列を「外部キー」と呼ぶ
ソースコードとデータベースの関係については以下のようになっています。
* db:migrationでマイグレーションファイルからDBテーブル、インデックスを生成する
* プログラム実行時にDBテーブルの列定義からモデルのフィールド定義を生成する
上の通りの関係なので、モデルに記述したhas_many や belongs_toはDBテーブルには影響を与えません。
※初めてrailsプログラム作成した頃は、db:migrationでテーブル作成する際にモデルに記述したhas_many や belongs_toがテーブルの関連に影響するものと勘違いしていました。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る