平々凡々エンジニア

平凡で難しい悩みを解決

nested_form_fieldsではやりたい事ができないかもしれない

やりたい事

f:id:ceratophrysgerogero:20200216184827p:plain
ファイル選択をユーザーが必要としている分だけ増やし複数の画像を投稿したい(動的に)

nested_form_fieldsできる事

名前から判断してform動的に追加作成する事ができそうだが単純にそうでもない事がわかった
結論からいうと指定したモデルの子を全て編集&追加or削除できるようなる

nested_form_fields git hubをみると以下のように使用する事がわかる

= form_for @user do |f|
  = f.nested_fields_for :videos do |ff|
    = ff.text_field :video_title

上記のように使用してみると
f:id:ceratophrysgerogero:20200216185700p:plain となるこれはすでに作成されている@user.videos.video_titleの全てを表示させ、編集できるようにしている。それに加え@user.videos.buildeを行っているのであれば全てを表示させた最後の行に新規用の空白フィールドを表示する事ができる。 私がやりたかったことは全てを編集する事ではなく、任意にフィールドを動的に増やす事だったのでnested_form_fieldsではできないことはなさそうだが本来の用途ではできない事がわかった。

反省

README.mdからThis Rails gem helps creating forms for models with nested has_many associations.
和訳すると
このRails gemは、ネストされたhas_manyアソシエーションを持つモデルのフォームを作成するのに役立ちます。
この文を勝手に自分の都合の良い解釈をしてしまった事が今回のgemの選定ミスになってしまいました。よく読むとどこにも使用した場合どのような結果になるのかは記載されていないのでコードからの結果予測を考える必要がありました。

学び

パッケージ、アプリや技術的な記事を投稿するなら、サンプルアプリや画像、動画を使用した説明ならば視覚的にわかりやすい事や読み手が間違えにくい事、言語による訳の誤差を大きく無くす事ができそうだと感じました。

to do 

今回やりたかったことはコード化するとかなりわかりやすくなります
<%= f.file_field :pictures, multiple: true %>
上記の一行を動的に複製することです
js周りの技術を使えばできそうだと思うのですがjsを触ったことが無いので苦労しそうです。