前提・実現したいこと
旅行の思い出を投稿するwebアプリを制作しています。
Spotというモデルで一地点ごとに情報をもたせ(address,image,content,title,post_id)、同一のpost_idを持つデータをPostモデルで1つにまとめて投稿するという機能を実装したいのですが、その投稿フォームの処理をつくるところで躓いています。
1つの投稿が持つ情報は、(address,image,content,title)xSpotの数+Postのcontent というふうになります。
投稿フォームは1ページで完結させたいので、Spotのフォームを、最初にレンダリングされる段階では1つのみで、「フォームを追加」ボタンがクリックされるたびに1つずつ増えるようにしたいのですが、それを試したところ、フォームを増やすことはできたのですが、
追加したフォームから受け取ったデータを保存する処理のイメージができず、ここで手が止まってしまっています。
解決法がわかる方がいましたら、よろしくお願いします。
↓投稿詳細ページにはなりますが、こんなイメージです。
Spotの1つのレコードごとに部分テンプレートを作るような感じです。(左のオレンジの部分)
今作っている投稿フォームでは、このSpotの一つ一つのレコードとPostのcontent(右上のグレーの部分)を保存できるようにしたいです。
該当のソースコード
↓posts/new.html.erb
html
1<div class="container"> 2 <h1 class="form-heading">投稿する</h1> 3 <%= form_with model: @post do |f|%> 4 <div class="field"> 5 <%= f.text_area :content, placeholder: "post.content"%><br> 6 <div id="forms"> 7 <div> 8 <%= f.fields_for :spots do |s| %> 9 <%= s.text_field :title, placeholder: "title"%><br> 10 <%= s.text_field :address, placeholder: "address"%><br> 11 <%= s.text_area :content, placeholder: "spot.content"%> 12 <span class="image"> 13 <%= s.file_field :image, accept: 'image/jpeg,image/gif,image/png' %> 14 </span> 15 <% end %> 16 </div> 17 </div> 18 </div> 19 <div class="btn btn-primary" id="add-form">フォームを追加</div> 20 <%= f.submit "投稿", class: "btn btn-primary" %> 21 22 <% end %> 23</div> 24 25<!-- フォームの追加 --> 26<script> 27 document.getElementById("add-form").addEventListener("click", function(){ 28 let forms = document.getElementById("forms"); 29 let clone = forms.firstElementChild.cloneNode(true); 30 31 forms.appendChild(clone); 32 }); 33</script>
↓posts_controller.rb
Ruby
1 def new 2 @post = Post.new 3 @post.spots.build 4 end 5 6 def create 7 @post = current_user.posts.build(post_params) 8 @post.save 9 redirect_to root_path 10 end 11 12def post_params 13 params.require(:post).permit(:content, spots_attributes: [:address, :image, :content, :title]) 14 end
試したこと
Spotのフォームを追加して投稿すると、最後のフォームの値のみ保存されるようです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/11/08 09:46
2020/11/08 11:37
退会済みユーザー
2020/11/09 21:49
2020/11/10 01:47
退会済みユーザー
2020/11/10 03:27