発生している問題・エラーメッセージ
現在CarrirWaveを用いて画像をアップロードする機能を作っているのですが、
どうしても画像がDBに格納されません。。
是非とも皆様の知恵をお借りできれば幸いです。
パラメーターには画像名が入っているのですが、@projectには格納されていない状態なためDBには保存されておりません。
terminal
1Started POST "/admin/project/complete" for ::1 at 2021-01-29 03:55:34 +0900 2Processing by ProjectsController#complete as HTML 3 Parameters: {"utf8"=>"✓", "authenticity_token"=>"PW/4od6USTkRYA/WejU0IdrzwYUOwnJa4D8B8X7Ucq0EouC3d3FtWIzw4cpRl+fMYnPcROrHs8zyEykNIwi7rg==", "project"=>{"page_title"=>"test", "page_description"=>"test", "category_id"=>"1", "image"=>"/uploads/tmp/1611860130-792812304018408-0001-1745/4F24F1AA-6D96-4ECA-93B2-517767B400CE.JPG", "contents"=>"<p>test</p>"}, "commit"=>"内容を確認する >"} 4 5From: /test-app/app/controllers/projects_controller.rb:24 ProjectsController#complete: 6 7 22: def complete 8 23: @project = Project.new(project_params) 9 => 24: binding.pry 10 25: if @project.save! 11 26: redirect_to :action => 'admin_index' 12 27: else 13 28: render :action => 'new' 14 29: end 15 30: end 16 17[1] pry(#<ProjectsController>)> @project 18=> #<Project:0x00007fdee0a3e640 19 id: nil, 20 page_title: "test", 21 page_description: "test", 22 category_id: 1, 23 image: nil, 24 contents: "<p>test</p>", 25 author_user_id: nil, 26 last_update_user_id: nil, 27 created_at: nil, 28 updated_at: nil>
なお、public/uploads/tmpへは保存されております。
そのまま処理を進めると、やはりDBに格納する直前でバリデーションがかかります。
terminal
1Started POST "/admin/project/complete" for ::1 at 2021-01-29 04:52:18 +0900 2Processing by ProjectsController#complete as HTML 3 Parameters: {"utf8"=>"✓", "authenticity_token"=>"Bl4b0y0RxyelZ4+fe+rF81IuJxjgB0uw3NROpcyJEnM/kwPFhPTjRjj3YYNQSBYe6q462QQCiibO+GZZkVXbcA==", "project"=>{"page_title"=>"wet", "page_description"=>"wet", "category_id"=>"1", "image"=>"/uploads/tmp/1611863536-108188832449489-0007-9172/4F24F1AA-6D96-4ECA-93B2-517767B400CE.JPG", "contents"=>"<p>qwet</p>"}, "commit"=>"内容を確認する >"} 4 (0.1ms) BEGIN 5 ↳ app/controllers/projects_controller.rb:24 6 (0.1ms) ROLLBACK 7 ↳ app/controllers/projects_controller.rb:24 8Completed 422 Unprocessable Entity in 3ms (ActiveRecord: 0.2ms) 9 10ActiveRecord::RecordInvalid (バリデーションに失敗しました: Imageを入力してください): 11 12app/controllers/projects_controller.rb:24:in `complete' 13
該当のソースコード
view/project/new.html.haml
haml
1- provide(:page_title, 'PROJECT 新規作成') 2 3.adminCommonContainer 4 = simple_form_for @project, url: admin_project_confirm_path, html: {multipart: true} do |f| 5 .inputField 6 = f.input :page_title, label: "タイトル", error: false 7 .inputField 8 = f.input :page_description, label: "ディスクリプション", error: false 9 .inputField 10 = f.input :category_id, as: :select, collection: [ ['Workshop', 1], ['Conference', 2] ], label: "カテゴリー", error: false 11 .inputField 12 = f.file_field :image, label: "サムネ写真", error: false 13 = f.hidden_field :image_cache 14 .inputField 15 = f.text_area :contents, label: "コンテンツ", error: false, class: "project_contents" 16 .submitButton 17 = f.submit '内容を確認する >', class: 'link__box'
controller/project_controller.rb
Ruby
1class ProjectsController < ApplicationController 2 3 def admin_index 4 @projects = Project.all.order('created_at DESC') 5 render :layout => 'admin_application' 6 end 7 def new 8 @project = Project.new 9 render :layout => 'admin_application' 10 end 11 def confirm 12 @project = Project.new(project_params) 13 render :layout => 'admin_application' 14 end 15 def complete 16 @project = Project.new(project_params) 17 binding.pry 18 if @project.save! 19 redirect_to :action => 'admin_index' 20 else 21 render :action => 'new' 22 end 23 end 24 25 private 26 def project_params 27 params.require(:project).permit(:page_title, :page_description, :category_id, :image, :image_cache, :contents, :author_user_id, :last_update_user_id) 28 end 29end
model/project.rb
Ruby
1class Project < ApplicationRecord 2 mount_uploader :image, ImageUploader 3 4 validates :page_title, presence: true 5 validates :page_description, presence: true 6 validates :category_id, presence: true 7 validates :image, presence: true 8 validates :contents, presence: true 9end
uploaders/image_uploader.rb
Ruby
1class ImageUploader < CarrierWave::Uploader::Base 2 3 # コメントアウト部省略 4 5 storage :file 6 7 # コメントアウト部省略 8 9 def store_dir 10 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 11 end 12 13 # コメントアウト部省略 14end 15
db/schema.rb
Ruby
1ActiveRecord::Schema.define(version: 2021_01_28_165336) do 2 create_table "projects", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| 3 t.string "page_title" 4 t.text "page_description" 5 t.integer "category_id" 6 t.string "image" 7 t.text "contents" 8 t.integer "author_user_id" 9 t.integer "last_update_user_id" 10 t.datetime "created_at", null: false 11 t.datetime "updated_at", null: false 12 end 13end 14
補足情報(FW/ツールのバージョンなど)
version
1ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin19] 2rails 5.2.4.4 3mysql Ver 14.14 Distrib 5.7.32, for osx10.15 (x86_64) using EditLine wrapper 4carrierwave (2.1.0)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。