実現したいこと
親モデルと一緒に子レコードを一括で登録したいです。
親→posts
子→items
親である、image, image_title, descriptionは入力後、保存され表示されるのですが
子の入力データがnilになってしまい保存・表示ができない状態です。
何か原因などわかる方いらっしゃいましたらアドバイスお願い致します。
導入済み
・gem cocoon
コントローラー
**postscontroller** class PostsController < ApplicationController before_action :ensure_correct_user, {only: [:edit, :update, :destroy]} def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find_by(id: params[:id]) @user = @post.user end def new @post = Post.new @post.items.build end def create @post = Post.new(post_params) @post.user_id = @current_user.id if @post.save @post.image="#{@post.id}.jpg" redirect_to("/posts/#{@post.id}") else render("/posts/new") end end def edit @post = Post.find_by(id: params[:id]) end def update @post = Post.find_by(id: params[:id]) @post.image_title = params[:image_title] @post.price = params[:price] @post.image_photo="#{@post.id}.jpg" image=params[:image_photo] File.binwrite("app/assets/images/posts/#{@post.image_photo}", image.read) if @post.save redirect_to("/posts/#{@post.id}") else render("posts/#{@post.id}/edit") end end def destroy @post = Post.find_by(id: params[:id]) @post.destroy redirect_to("/") end def ensure_correct_user @post = Post.find_by(id: params[:id]) if @post.user_id != @current_user.id flash[:notice] = "権限がありません" redirect_to("/posts/index") end end private def post_params params.require(:post).permit(:image, :image_title, :description, items_attributes: [:item_image, :products_name, :brand, :size, :price, :id, :_destroy]) end end
Modelの記載
######親:Post.rb
class Post < ApplicationRecord belongs_to :user has_many :items, inverse_of: :post, dependent: :destroy accepts_nested_attributes_for :items, allow_destroy: true validates :user_id, {presence: true} mount_uploader :image, ImageUploader def user return User.find_by(id: self.user_id) end end
######子:Item.rb
class Item < ApplicationRecord belongs_to :post end
form(html)
html
1**posts/new.html** 2<div class="main posts-new"> 3 <div class="container"> 4 <h1 class="form-heading">投稿画面</h1> 5 6 <%= form_with(model: @post, local: true) do |s| %> 7 8 <p>メイン写真(コーディネート写真)</p> 9 <label for="file_photo"> 10 <%= s.file_field :image %> 11 </label><br> 12 <div class="msr_text_05"> 13 <label>タイトル</label> 14 <%= s.text_field :image_title %><br> 15 </div> 16 <div class="msr_text_05"> 17 <label>説明</label> 18 <%= s.text_field :description %> 19 </div> 20 <div class="parents"> 21 <%= s.fields_for :items do |t| %> 22 <%= render "posts/items_fields", f: t %> 23 <% end %> 24 <div class="links"> 25 <%= link_to_add_association "+アイテム入力フォーム追加", s, :items, partial: 'items_fields' %> 26 </div> 27 </div><br> 28 <div class="actions"> 29 <%= s.submit "投稿" %> 30 </div> 31 <% end %> 32 <br> 33 <%= link_to("トップページへ戻る", "/") %> 34 </div> 35</div>
html
1**posts/_items_fields.html** 2<div class="nested-fields"> 3 <table> 4 <tr> 5 <td class="td-fixed-select"> 6 7 <%= f.fields_for :items do |t| %> 8 <div class="msr_file_05"> 9 <p>アイテム写真</p> 10 <label for="file_photo"> 11 画像を選択してください 12 <%= t.file_field :item_image %> 13 </label> 14 </div> 15 <div class="msr_text_05"> 16 <label>商品名</label> 17 <%= t.text_field :products_name %> 18 </div> 19 <div class="msr_text_05"> 20 <label>ブランド</label> 21 <%= t.text_field :brand %> 22 </div> 23 <div class="msr_text_05"> 24 <label>サイズ</label> 25 <%= t.text_field :size %> 26 </div> 27 <div class="msr_text_05"> 28 <label>価格</label> 29 <%= t.text_field :price %> 30 </div> 31 <!-- 削除ボタン --> 32 <%= link_to_remove_association "アイテムを削除", f %> 33 <% end %> 34 </td> 35 </tr> 36 </table> 37</div>
html
1**posts/show.html** 2<div class="main posts-show"> 3 <div class="container"> 4 <div class="posts-show-item"> 5 <%= link_to(@user.name, "/users/#{@user.id}") %> 6 <p> 7 <%= image_tag @post.image.url %> 8 </p> 9 <p> 10 <%= @post.image_title %> 11 </p> 12 <p> 13 <%= @post.description %> 14 </p> 15 16 <%= form_tag("/posts/items_fields") do %> 17 <p><span>アイテム名</span> 18 <%= @post.products_name %> 19 </p> 20 <p><span>ブランド</span> 21 <%= @post.brand %> 22 </p> 23 <p><span>サイズ</span> 24 <%= @post.size %> 25 </p> 26 <p><span>¥</span> 27 <%= @post.price %> 28 </p> 29 <% end %> 30 31 <div class="post-time"> 32 <%= @post.created_at.strftime("%Y-%m-%d") %> 33 </div> 34 <% if @post.user_id == @current_user.id %> 35 <div class="post-menus"> 36 <%= link_to("編集", "/posts/#{@post.id}/edit") %> 37 <%= link_to("削除", "/posts/#{@post.id}/destroy", {method: "post"}) %> 38 </div> 39 <% end %> 40 </div> 41 </div> 42 <%= link_to("トップページへ", "/") %> 43</div>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。