###動作環境
ruby 2.4.4
Rails 5.2.0
gem 2.6.14.1
carrierwave 1.2.3
現在行っていること・問題
・Rails5を用いて、複数のモデルにデータを保存するフォームを作成中です。
・SirabasuというモデルとImageモデルがあり、1対多の関係を持っています。
・Sirabasuにレコードを1つ保存するフォーム内において、画像アップロードのfieldを記述し、その画像はImageに保存されるようにしたいです。(現状、画像は1枚としていますが、いずれは複数登録したい)
・Sirabasuにはデータが保存されているのですが、Imageには保存されませんでした。
調べた限りでの対策は行ったつもりなのですが、どうして良いかわかりません。どなたか解決策をご教授いただけないでしょうか。
参考にしたサイト
【Rails】formで複数モデル(テーブル)にレコードを登録 - teratail
一つのform_forで複数のテーブルに保存!! - Qiita
###schema(一部)
Ruby
1create_table "images", force: :cascade do |t| 2 t.string "image_path" 3 t.integer "sirabasu_id" 4 t.datetime "created_at", null: false 5 t.datetime "updated_at", null: false 6 end 7 8create_table "sirabasus", force: :cascade do |t| 9 t.string "name" 10 t.text "content" 11 t.integer "number" 12 t.datetime "created_at", null: false 13 t.datetime "updated_at", null: false 14 t.integer "userid" 15 t.integer "cid" 16 end 17
###Model(Sirabasu)
Ruby
1class Sirabasu < ApplicationRecord 2 has_many :images, dependent: :destroy 3 accepts_nested_attributes_for :images 4end
###Model(Image)
Ruby
1class Image < ApplicationRecord 2 belongs_to :sirabasu, optional: true 3end 4
ruby
1 2 def new 3 @sirabasu = Sirabasu.new 4 @sirabasu.images.build 5 end 6 7 def create 8 @sirabasu = Sirabasu.new(sirabasu_params) 9 if @sirabasu.save 10 redirect_to('/sirabasus') 11 else 12 render 'new' 13 end 14 end 15 16 def sirabasu_params 17 params.require(:sirabasu).permit(:number, :name, :content, :userid, :cid, sirabasus_attributes: [:image_path]) 18 end
###View(sirabasu#new)一部
ruby
1<%= form_for(@sirabasu) do |form| %> 2 <%= form.number_field :number %> 3 <%= form.text_field :name %> 4 <%= form.text_area :content %> 5 <%= form.fields_for :images do |i| %> 6 <%= i.file_field :image_path %> 7 <% end %> 8 <%= form.hidden_field :cid, :value => "" %> 9 <%= form.hidden_field :userid, :value => "" %> 10 <%= form.submit "登録", :class =>"link-button"%> 11<% end %>
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/11/07 16:41