Railsの関連付けの基礎知識

Railsの関連付けについて

関連付け(association)は2つのモデル同士の繋がりを意味する。
関連付けをすることでコードをシンプルに書くことができる。
例:
「userとtask」 は 「1対多」 の関係。
1人のuserはいくつかのtaskを持っている。

関連付けの種類

関連付けを行う際は、関連付けの種類に応じて以下の宣言を行うことで関連付けが可能になる。

宣言 関係性 特徴
belongs_to 1対1 もう一方のモデルと従属する
has_one 1対1 もう一方のモデルを所有している
has_many 1対多 もう一方のモデルにはbelongs_toが使われる
has_many :through 多対多 第3のモデルが介入する
has_one :through 1対1 第3のモデルが介入する
has_and_belongs_to_many 多対多 第3モデルが介入しない

例:

class User < ActiveRecord::Base
  has_many :tasks
end

class Task < ActiveRecord::Base
  belongs_to :user
end

便利な使い方

buildメソッド

子モデルのインスタンスを作成することができる。
以下の例では、特定のuserが持つtaskインスタンスを@taskで使えるようにしている。

例:

@user = User.find(params[:id])
@task = @user.tasks.build

親モデルのデータの取得

特定の子モデルの情報から紐付いている親モデルのデータを取得できる。
以下では、特定のtaskが紐付いているuserを@userで利用できるようにしている。

例:

@task = task.find(params[:id])
@user = @task.user

参考

railsguides.jp