アプリなどを開発するブログ

React Native / Swift / Ruby on Railsなどの学習メモ。


Rails4でaccepts_nested_attributes_for, allow_destroy: true

Rails4でaccepts_nested_attributes_for, allow_destroy: true なフォームつくっててハマった。

モデルの構成が、
Author has_one Book
だとして、Strong Parameters を以下のようにする。

params.require(:author).permit([
      book_attributes:[:title, :price]])

ほいで、フォーム経由でBookを削除したい時、削除できない。
サーバーのメッセージを見ると、
Unpermitted parameters :_destroy, :id
とある。
むむっと思ってその2つを足してみた。

params.require(:author).permit([
      book_attributes:[:title, :price, :_destroy, :id]])

これで、フォームからBookモデルを削除できるようになった。

しかし、_destroyを追加しないといけないのは何となくわかるものの、
(てかこれも、 allow_destroy: true で勝手にやってくれるもんだと思ってた。)
:idを渡さないといけないのは何でなんだろう。

#参考

http://stackoverflow.com/questions/18308714/nested-fields-and-strong-parameters