アソシエーションについて
アソシエーションとは
Ruby on RailsのActive Recordでテーブル間(モデル)の関連付けを行うこと
メソッドの種類
belongs_to...(「1対1」のつながりを設定する)
has_one...(「1対1」のつながりを設定する。belongs_toとの違いは、他方のモデルのインスタンスをまるごと含んでいること)
has_many...(「1対多」のつながりを設定する場合によく使われる。)
has_many :through...(「多対多」のつながりを設定する場合によく使われる。この関連付けは、2つのモデルの間に「第3のモデル」(結合モデル)が介在する点が特徴)
has_one :through...(他方のモデルに対して「1対1」のつながりを設定。この関連付けは、2つのモデルの間に「第3のモデル」(結合モデル)が介在する点が特徴)
has_and_belongs_to_man...(他方のモデルと「多対多」のつながりを作成する。through:を指定した場合と異なり、第3のモデル(結合モデル)が介在しない)
ex.)twitterのような投稿アプリの時
User一人に対してPostsにはUserが投稿した複数の情報が入っている。
UserとPostsを連携させるために使うメソッドがbelongs_toメソッドとhas_manyメソッドだ。
英文で書くと、、、
user has many posts (userはpostsを所有する)
posts belongs to user (postsはuserに属する)
なのでUserモデルには
has_many :posts, dependent: :destroy
Postsモデルには
belongs_to :user
を記入し連携させる
dependentオプションとは
モデルの親レコードを削除するときに子のレコードを削除するかどうかを決めるオプション。
種類
オプション 説明
:destroy 親レコードと一緒に子レコードを削除。子レコードのコールバックも実行
:delete_all 親レコードと一緒に子レコードを削除。SQL直接実行なのでコールバックなし
:nullify 子レコードの外部キーをNULL更新する
:restrict_with_exception 子レコードがある場合はActiveRecord::DeleteRestrictionErrorを発生
:restrict_with_error 子レコードがある場合は削除が失敗し、親レコードにエラー情報を付与
Author And Source
この問題について(アソシエーションについて), 我々は、より多くの情報をここで見つけました https://qiita.com/rainbow___0/items/9f3bc4c1dfde10a227b0著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .