[Ruby on Rails 4] 1対多のリレーションモデルと入れ子フォームの実装のポイント
関連付け、バリデーション、フォームまわり。
[markdown]
## 関連付け
* [Active Record の関連付け (アソシエーション) | Rails ガイド](https://railsguides.jp/association_basics.html#%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91%E3%81%AE%E8%A9%B3%E7%B4%B0%E6%83%85%E5%A0%B1)
* [Rails4で1対多のリレーションをモデルに実装する – Rails Webook](http://ruby-rails.hatenadiary.com/entry/20141203/1417601540)
* [開発現場でちゃんと使えるRails 4入門(6):ActiveRecordにおけるモデルの「関連」とコールバックの使い方 (1/3) – @IT](http://www.atmarkit.co.jp/ait/articles/1406/30/news030.html)
`has_many` の `:dependent` オプション
– `has_many` の `:dependent` オプションは、「関連」するモデルオブジェクトを削除する。
– `:destroy` を値として渡すと、全ての「関連」するオブジェクトも「destroy」メソッドを呼び削除する。
– `:delete_all` を値に渡すと、「コールバック」なしで「関連」するオブジェクトのレコードにSQLのDELETE文を実行する。
## バリデーション
* [Active Record バリデーション | Rails ガイド](https://railsguides.jp/active_record_validations.html#%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B)
* [検証(validation) – – Railsドキュメント](http://railsdoc.com/validation)
* [Rails 4でモデルのバリデーションまとめ – Rails Webook](http://ruby-rails.hatenadiary.com/entry/20140724/1406145303)
親から子を削除するときに、子の個数が残っている事をバリデーションしたい。
削除後にいくつ残るかは [marked_for_destruction?](http://api.rubyonrails.org/v4.2.7.1/classes/ActiveRecord/AutosaveAssociation.html#method-i-marked_for_destruction-3F) で取得できた。
* [ruby on rails – Nested models and parent validation – Stack Overflow](http://stackoverflow.com/questions/5144527/nested-models-and-parent-validation)
## StrongParameters
* [Rails4でフォームに入力された値を取得するStrongParameters機能 – Rails Webook](http://ruby-rails.hatenadiary.com/entry/20141126/1417012848)
* [StrongParameters | TECHSCORE(テックスコア)](http://www.techscore.com/tech/Ruby/rails-4.0/strong-parameters/)
attr_accessible から StrongParameters に変わった。
ホワイトリスト形式。
## Nested Model Forms
* [Rails 複数の子レコードの作成・更新を自在に扱う (accepts_nested_attributes_for) – Qiita](http://qiita.com/shizuma/items/5bfcf6c1e855b959e135)
* [Railsでaccepts_nested_attributes_forとfields_forを使ってhas_many関連の子レコードを作成/更新するフォームを作成 – Rails Webook](http://ruby-rails.hatenadiary.com/entry/20141208/1418018874)
Rails 3 についてだけれども分かりやすい。
* [#196 Nested Model Form Part 1 – RailsCasts](http://railscasts.com/episodes/196-nested-model-form-part-1)
* [#197 Nested Model Form Part 2 – RailsCasts](http://railscasts.com/episodes/197-nested-model-form-part-2)
作成機能
– 親 Model に `accepts_nested_attributes_for` を追加する。
– 親 View に `fields_for` で入れ子フォームを表示できる。
– `fields_for` は `[引数に与えた名前]_attributes` という name 属性でフォームを作成する。
– 親 Controller の StrongParameter で `[引数に与えた名前]_attributes` を許可する。
削除機能
– 親 Model に `allow_destroy: true` を追加する。
– 親 View の削除チェックボックスのキーを `_destroy` とする。
– 親 Controller の StrongParameter で `_destroy` を許可する。
バリデーション
– Model に `validates` を設定する。
– 子 Model の作成が必須でない場合、親 Model で `reject_if` を設定することでバリデーションの範囲を限定できる。
入力項目の動的な追加・削除機能
– Rails で提供されていないので Ajax で作成する。
## 補遺
* [Railsを始めたばかりの人向け!Railsの仕組みを一から理解しながらブログを作成する – Rails Webook](http://ruby-rails.hatenadiary.com/entry/20140813/1407915718#getting-up-and-running)
[/markdown]