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