前提・実現したいこと
DBに適切に内容を保存したい。
発生している問題
保存に成功しているのに、sequel proには表示されていない。
フリマアプリの出品機能において、createアクションでDBに保存するよう指示をしていますが、sequel proで確認すると保存されていないようです。
保存が成功するとroot_pathに遷移するよう設定しているのですが、submitボタンを押した後は、しっかりroot_pathへ遷移しているのです。
試したこと
binding.pryによるデバッグを試みた。
terminal
imageテーブルを別に作ってあり、そこに画像が保存されるようにしているが、
"#ActionDispatch::Http::UploadedFile:0x00007f8e38c7ce00"
という形で入っていたのでそれにも原因があるのか調べたが、特に関連性はなさそうだった。
該当画像
該当のソースコード
ruby
1#routes.rb 2 3Rails.application.routes.draw do 4 devise_for :users 5 root "products#index" 6 resources :products do 7 member do 8 get :purchase 9 end 10 end 11end 12
ruby
1#products_controller.rb 2 3class ProductsController < ApplicationController 4 # before_action :ensure_current_user, only: [:new, :create, :destroy] 5 before_action :set_product, only: :destroy 6 7 def index 8 @products = Product.all 9 end 10 11 def new 12 # if user_signed_in? 13 @product = Product.new 14 @product.images.new 15 # else 16 # redirect_to root_path 17 # end 18 end 19 20 def create 21 #binding.pry 22 @product = Product.new(product_params) 23 if @product.images.present? 24 @product.save 25 redirect_to root_path 26 else 27 render :new 28 end 29 end 30 31 def destroy 32 if @product.delete 33 redirect_to products_path, notice: '削除されました' 34 else 35 render :index 36 end 37 end 38 39 def purchase 40 @product_buyer= Product.find(params[:id]) 41 @product_buyer.update( buyer_id: current_user.id, status: "購入済み") 42 redirect_to root_path 43 end 44 45 private 46 def product_params 47 params.require(:product).permit(:name, :price, :detail, :fee, :condition, :day, :size, :method, :brand_id, :prefecture_id, :user_id, :status, images_attributes: [:product_image,:_destroy,:id]) 48 end 49 50 # def ensure_current_user 51 # product = Product.find(params[:id]) 52 # if product.user_id != current_user.id 53 # flash[:notice] = "no authorization" 54 # redirect_to action: :index 55 # end 56 # end 57 58 def set_product 59 @product = Product.find(params[:id]) 60 end 61end 62
ruby
1#product.rb 2 3class Product < ApplicationRecord 4 enum brand_id: {"シャネル": 0, 5 "グッチ": 1, 6 "プラダ": 2, 7 "エルメス": 3, 8 "バレンシアガ": 4, 9 "フェンディ": 5, 10 "ボッテガ・ヴェネタ": 6, 11 "ヴァレンチノ": 7, 12 "サン・ローラン": 8, 13 "アルマーニ": 9 } 14 15 enum size: {"XXS以下": 0, 16 "XS(SS)": 1, 17 "S": 2, 18 "M": 3, 19 "L": 4, 20 "XL(LL)": 5, 21 "2XL(3L)": 6, 22 "3XL(4L)": 7, 23 "4XL(5L)以上": 8, 24 "FREESIZE": 9 } 25 26 enum condition: { "新品・未使用": 1, 27 "未使用に近い": 2, 28 "目立った傷や汚れなし":3, 29 "やや傷や汚れあり":4, 30 "傷や汚れあり":5, 31 "全体的に状態が悪い":6 } 32 33 enum fee: { "送料込み(出品者負担)":1, 34 "送料込み(出品者負担)":2, 35 "着払い(購入者負担)":3, 36 "着払い(購入者負担)":4 } 37 38 enum day: { "1~2日で発送":1, 39 "2〜3日で発送":2, 40 "4〜7日で発送":3 } 41 42 enum method: {"メルカリ便":0, 43 "ヤマト":1, 44 "レターパック":2 } 45 46 enum status: {"出品中":0, 47 "購入済み":1 } 48 49 enum prefecture_id:{ 50 "北海道":1, "青森県":2, "岩手県":3, 51 "宮城県":4, "秋田県":5, "山形県":6, 52 "福島県":7, "茨城県":8, "栃木県":9, 53 "群馬県":10, "埼玉県":11, "千葉県":12, 54 "東京都":13, "神奈川県":14, "新潟県":15, 55 "富山県":16, "石川県":17, "福井県":18, 56 "山梨県":19, "長野県":20, "岐阜県":21, 57 "静岡県":22, "愛知県":23, "三重県":24, 58 "滋賀県":25, "京都府":26, "大阪府":27, 59 "兵庫県":28, "奈良県":29, "和歌山県":30, 60 "鳥取県":31, "島根県":32, "岡山県":33, 61 "広島県":34, "山口県":35, "徳島県":36, 62 "香川県":37, "愛媛県":38, "高知県":39, 63 "福岡県":40, "佐賀県":41, "長崎県":42, 64 "熊本県":43, "大分県":44, "宮崎県":45, 65 "鹿児島県":46, "沖縄県":47 66 } 67 68 belongs_to :user 69 belongs_to :category 70 has_many :images, dependent: :destroy 71 accepts_nested_attributes_for :images, allow_destroy: true 72 73 validates :name, :detail, presence: true 74 validates :price, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 300, less_than_or_equal_to: 9999999} 75 validates :fee, :condition, :day, :user_id, :prefecture_id, presence: true #, :method 76 validates :status, presence: true 77 # validates :category_id, numericality: { only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 13} 78 79end
ruby
1#image.rb 2 3class Image < ApplicationRecord 4 mount_uploader :product_image, ImageUploader 5 belongs_to :product, optional: true 6 validates :product_image, presence: true 7end 8
ruby
1#database.yml 2 3# MySQL. Versions 5.5.8 and up are supported. 4# 5# Install the MySQL driver 6# gem install mysql2 7# 8# Ensure the MySQL gem is defined in your Gemfile 9# gem 'mysql2' 10# 11# And be sure to use new-style password hashing: 12# https://dev.mysql.com/doc/refman/5.7/en/password-hashing.html 13# 14default: &default 15 adapter: mysql2 16 encoding: utf8 17 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> 18 username: root 19 password: 20 socket: /tmp/mysql.sock 21 22development: 23 <<: *default 24 database: mercari_development 25 26# Warning: The database defined as "test" will be erased and 27# re-generated from your development database when you run "rake". 28# Do not set this db to the same as development or production. 29test: 30 <<: *default 31 database: mercari_test 32 33# As with config/credentials.yml, you never want to store sensitive information, 34# like your database password, in your source code. If your source code is 35# ever seen by anyone, they now have access to your database. 36# 37# Instead, provide the password as a unix environment variable when you boot 38# the app. Read https://guides.rubyonrails.org/configuring.html#configuring-a-database 39# for a full rundown on how to provide these environment variables in a 40# production deployment. 41# 42# On Heroku and other platform providers, you may have a full connection URL 43# available as an environment variable. For example: 44# 45# DATABASE_URL="mysql2://myuser:mypass@localhost/somedatabase" 46# 47# You can use this database configuration with: 48# 49# production: 50# url: <%= ENV['DATABASE_URL'] %> 51# 52production: 53 <<: *default 54 database: mercari_production 55 username: root 56 password: <%= ENV['DATABASE_PASSWORD'] %> 57 socket: /var/lib/mysql/mysql.sock
######関連画像
product table
image table
補足情報
rails 6, mysql
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/07 03:40 編集
2020/07/07 04:48
2020/07/07 08:37
2020/07/07 09:09
2020/07/07 09:21
2020/07/07 09:28
2020/07/07 09:52