前提・実現したいこと
Railsでテキストや画像を投稿するアプリを作っています。
投稿後にDBを確認すると投稿内容が保存されていません。
保存されるようにするにはどう修正したら良いでしょうか。
発生している問題
投稿内容がDBに保存されない。
エラーメッセージもなし。
該当のソースコード
PrototypesController.rb
Ruby
1class PrototypesController < ApplicationController 2 def index 3 end 4 5 def new 6 @prototype = Prototype.new 7 end 8 9 def create 10 @prototype = Prototype.new(prototype_params) 11 if @prototype.save 12 redirect_to root_path 13 else 14 render :new 15 end 16 end 17 18 private 19 def prototype_params 20 params.require(:prototype).permit(:title, :catch_copy, :concept, :image).merge(user_id: current_user.id) 21 end 22end
new.html.erb
Ruby
1<div class="main"> 2 <div class="inner"> 3 <div class="form__wrapper"> 4 <h2 class="page-heading">新規プロトタイプ投稿</h2> 5 <%= render partial: 'form' %> 6 </div> 7 </div> 8</div>
_form.html.erb
Ruby
1<%= form_with(model: @prototype, local: true) do |f| %> 2 <div class="field"> 3 <%= f.label :title, "プロトタイプの名称" %><br /> 4 <%= f.text_field :title %> 5 </div> 6 7 <div class="field"> 8 <%= f.label :catch_copy, "キャッチコピー" %><br /> 9 <%= f.text_area :catch_copy, class: :form__text %> 10 </div> 11 12 <div class="field"> 13 <%= f.label :concept, "コンセプト" %><br /> 14 <%= f.text_area :concept, class: :form__text %> 15 </div> 16 17 <div class="field"> 18 <%= f.label :image, "プロトタイプの画像" %><br /> 19 <%= f.file_field :image %> 20 </div> 21 22 <div class="actions"> 23 <%= f.submit "保存する", class: :form__btn %> 24 </div> 25<% end %>
routes.rb
Ruby
1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'prototypes#index' 4 resources :prototypes, only: [:index, :new, :create] 5end
試したこと
そもそも情報を渡せていないのでは?と思い、PrototypesController.rbの
paramsをbinding.pryで確認しました。
Ruby
1def create 2 binding.pry 3 @prototype = Prototype.new(prototype_params) 4 if @prototype.save 5 redirect_to root_path 6 else 7 render :new 8 end 9 end
以下、ターミナルでのparams確認結果。
[2] pry(#<PrototypesController>)> prototype_params => <ActionController::Parameters {"title"=>"sample", "catch_copy"=>"hoge", "concept"=>"hogehoge", "image"=>#<ActionDispatch::Http::UploadedFile:0x00007fe85ee6f598 @tempfile=#<Tempfile:/var/folders/5c/yst1vb5d1d98_3jlgxst9nv00000gn/T/RackMultipart20210127-11354-5oazu9.jpg>, @original_filename="sea-164989_1280.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"prototype[image]\"; filename=\"sea-164989_1280.jpg\"\r\nContent-Type: image/jpeg\r\n">, "user_id"=>1} permitted: true>
補足情報(FW/ツールのバージョンなど)
- Ruby on Rails 6
- devise
- Active Storage
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 00:58 編集