🐱
Active Recordの関連付け(has_one)
前回のbelongs_toの記事に続いて今回はhas_oneを文章でまとめていく
has_one
has_one関連付けは相手側のモデルがこのモデルへの参照を持っていることを示しており、
相手側のモデルは、参照(foreign_keyなど)を通して、fetchすることができる。
具体例
今回はケースとして従業員テーブル(employee)と職員証テーブル(employee_card)
で考える。職員ごとに職員証が一つ存在する場合は、以下のように宣言する
class Employee < ApplicationRecord
has_one : employee_card
end
belogns_toとの違いはリンクカラム(employee_id)が相手側のテーブルにあり、has_oneを宣言したテーブルには存在しないこと。(employeeテーブルにはemployee_id元カラムのidしかない)
マイグレーションは以下の通り
class CreateEmployees < ActiveRecord:Migration
def change
create_table :employees do |t|
t.string :name
t.timestamps
end
create_table :employee_card do |t|
t.references :employee, index: { unique: true }, foreign_key: true
t.string :employee_number
t.timestamps
end
end
end
追加されるメソッド
上記のケースでは以下のメソッドが追加される
- employee_card
@employee_card = @employee.employee_card - employee_card=
- build_employee_card
- create_employee_card
- create_employee_card!
- reload_employee_card
- reset_employee_card
Discussion