LoginSignup
0
0

More than 1 year has passed since last update.

アソシエーション部分で働いている色々なモデル内まとめ

Posted at

belong_to

この関連付けをされているクラスには外部キーがあること前提
外部キーが別クラスにある場合はhas_oneを使用する必要がある


:optional

belong_toで使えるオプションの一つ

公式
:optionalオプションをtrueに設定すると、
関連付けされたオブジェクトの存在性のバリデーションが実行されないようになる。

☆値が空で来たときはエラーを返さずに、その空情報をなかったかのように振る舞わせることができる
☆optional: trueはpresence:trueと逆のことをしている
☆外部キーのnilを許容してくれる
☆アソシエーション組んである状態のため親要素がないとエラー!って出てしまうモデルのチェックを回避してくれる

今回は親の情報が入った時点で子要素側に親_idの情報が渡すことができるようになる
そのため親が存在していないと子は保存できない状態にあるということ
いつ親の要素が入るのか
親と子の要素が一緒に登録されるからことここの記述が必要になるという特殊な状態
一旦子要素が親要素がない状態でも作られるようにしていて
親要素ができたタイミングで子要素を紐付けをさせるようにしている


reject_if: :all_blank

accepts_nested_attributes_forをすると空の文字列が入っているデータを弾いてくれる


allow_destroy: true

モデル経由から別モデルを削除する時に必要なオプション
親要素側から削除する必要がある
※今回はネストさせて使用するデータベース = controllerがない = destroyアクションがないという状態
コントローラがない特殊なモデルaccepts_nested_attributes_forの関係の時どう削除するか
自分に紐づいているコントローラを持たないモデルのデータを消したいときに使う


dependent: :destroy

親要素がいなくなってしまったときに子要素が浮いた状態にならないように削除される


belongs_toとhas_oneのどちらを選ぶか

2つのモデルの間に1対1の関係を作りたいのであれば、いずれか一方のモデルにbelongs_toを追加し、もう一方のモデルにhas_oneを追加する必要があります。
外部キー(foreign key)をどちらに置くかできまる


0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0