質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

1522閲覧

railsで、商品投稿、更新ができなくなった

fork_

総合スコア43

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2019/09/01 12:07

編集2019/09/03 11:57

railsで、 ECサイト風アプリを作っているのですが、1週間ほど手をつけていませんでした。それまでは商品登録、編集が出来ていました。before_actionの存在を知り、編集して動作確認しようとしたところ、商品の登録や、更新に失敗してしまいます。before_actoinのせいでは無いと思うのですが、何が原因で今まで出来たことができなくなっているのかがわからないので、ご教示いただけますと幸いです。

商品のコントローラーを、productsコントローラーとしています。

productsコントローラーがこちらになります。

class ProductsController < ApplicationController before_action :find_post, only:[:show,:edit,:update,:destroy] def home end def index @products =Product.all @cart=Cart.new end def new @product =Product.new end def create @product = current_user.products.new(product_params) if @product.save redirect_to products_path,success:"商品登録に成功しました" else flash.now[:danger]="商品登録に失敗しました" render :new end end def show  # @product = Product.find(params[:id]) end def edit #@product = Product.find(params[:id]) end def update # @product = Product.find(params[:id]) @product.update(product_params) if @product.save redirect_to products_path,success:'編集に成功しました' end end def destroy # @product = Product.find(params[:id]) if @product.destroy redirect_to products_path,success:'商品を削除しました' end end private def product_params params.require(:product).permit(:title,:image,:description,:price) end def find_post @product = Product.find(params[:id]) end end

商品を登録するview(products/new)がこちらになります

<div class="topic-new-wrapper" > <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"> <h1 class="text-center">商品の登録</h1> <%= form_for @product do |f| %> <div class="form-group"> <%= f.label "タイトル" %> <%= f.text_field :title%> </div> <div class="form-group"> <%= f.label "¥" %> <%= f.number_field :price%> </div> <div class="form-group"> <%= f.label "画像の登録" %> <%= f.file_field :image%> </div> <div class="form-group"> <%= f.label "商品の概要" %> <%= f.text_area :description, class: 'form-control' %> </div> <%= f.submit '投稿', class: 'btn btn-black btn-block' %> <% end %> </div> </div> </div> </div>

商品(product)のマイグレーションファイルがこちらになります。

class CreateProducts < ActiveRecord::Migration[5.2] def change create_table :products do |t| t.string :title t.string :image t.string :description t.integer :price t.integer :user_id t.integer :quanity t.timestamps end end end

投稿に失敗した時のpumaの動きが、こちらになります。
イメージ説明

productモデルが、こちらになります。

class Product < ApplicationRecord validates :title,presence: true validates :image,presence: true validates :description,presence: true belongs_to :order belongs_to :user has_many:carts has_many :cart_users, through: :carts, source: 'user' mount_uploader :image, ImageUploader end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2019/09/01 14:34

プログラムは、<code>を使って質問欄に記入していただけませんか。 回答するときにコピペなどが楽ですので
guest

回答1

0

ベストアンサー

logにある 20行目って
if @product.save
だとおもうのですが、ここで ROLLBACKしてます。
何らかの原因でsaveに失敗していますがその情報が表示できるようになっていないですね。
view(products/new) に product.errors.full_messagesを表示する仕掛けを入れるのが良くやられる方法ですが、flashが表示できるのでしたらとりあえず
flash.now[:danger]=@product.errors.full_messages.join
として、どういうエラーか見て下さい。
それで解決策がわからなかったら、モデル Productの関連、validationの辺りを載せて下さい。

投稿2019/09/02 23:29

winterboum

総合スコア23329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fork_

2019/09/03 11:57 編集

Order must exist と出ています。 Orderとは、Orderモデルのことだと思うのですが、商品投稿する際にOrderは触らないと思います.... モデルを載せますので、ご教示お願いいたします。
winterboum

2019/09/03 12:17

belongs_to :order が有るため、必須となります。 必須でないなら belongs_to :order, optional: true として下さい(optionalの綴不安) ですが、、、、 Productへの注文は1つしか受けないのでしょうか? 単品の出品?
fork_

2019/09/04 10:58

商品投稿成功しました!! そうですね、、商品と、カートと、オーダー間のアソシエーションが分からなかったので、そのようにしています。 話と逸れるかもしれませんが、productとorderの関係性は明示しなくてもよろしいのでしょうか。
winterboum

2019/09/04 11:01

明示しなくても動きますが、明示すると便利なmethodが定義されます。 product.order というようなのは明示しないと使えません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問