🦝
Active Recordの関連付け(belongs_to)
関連付け(association)がまったく理解できない
Railsの学習においてORM(object-relational-mapping)の習得は重要だが、
has_many :throughからまったく理解できなくなってしまった。
というわけで、全ての関連付けを改めて文章にしながら復習していく。
関連付けの種類
関連付けのリストは以下の通り,今回はbelongs_toからまとめていく
- belongs_to
- has_one
- has_many
- has_many :through
- has_one :through
- has_and_belongs_to_many
belongs_to
belongs_toは1対1リレーションとも呼ばれ、宣言を行った側のモデルは
他方のモデルに従属(belongs_to)する
モデルでの宣言方法は以下の通り
class Post < AplicationRecord
belongs_to :user
end
なお、マイグレーションでの宣言は以下の通り
class CreatePosts < ActiveRecord::Migrateion
def change
create_table :posts do |t|
t.references :user, null: false, foreign_key: true
t.string :title
t.text :body
end
end
end
references :user
を使うことで自動的にuser_idカラムを作成し、デフォルトでインデックスを
追加する。また、外部キー制約をつけるために、foreign_key: true
を指定する。
追加されるメソッド
belogns_toの関連付けによって以下のメソッドが自動的に使用できるようになる
- user
post.user
Postインスタンスから関連するUserインスタンスを取得する - user=
post.user = some_user
Postインスタンスに関連づけるUserインスタンスをせってい する - build_user
post.build_user(name: "New_user")
新しいUserインスタンスを生成するが、データーベースには保存されていない - create_user
post.create_user(name: "New_user")
新しいuserインスタンスを生成し、データベースに保存する - create_user!
create_userと同じだが、レコードが無効な場合にエラーが発生する *通常はnil
以下のメソッドはの詳細は省略! - reload_user
- reset_user
- user_changed?
- user_previously_changed?
Discussion