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

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

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

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

Q&A

解決済

1回答

755閲覧

購入機能でItem can't be blankと出てしまう

take20998267

総合スコア3

Ruby on Rails 5

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

0グッド

0クリップ

投稿2023/02/01 00:18

実現したいこと

購入機能の実装で、情報を入力して購入することができるようにしたい

前提

ここに質問の内容を詳しく書いてください。

Ruby on Railsでフリマアプリを作っています
購入機能の実装で、情報を入力して購入することができるようにしたい
のですが、必要な情報を入力して購入ボタンを押すと
エラーになる

発生している問題・エラーメッセージ

Item can't be blank

該当のソースコード

orders_controller.rb

ruby

1def order_params 2 params.require(:order_payment).permit(:post_code, :prefecture_id, :city, :block, 3 :building, :phone_number) 4 .merge(user_id: current_user.id, item_id: @item_id, token: params[:token]) 5end

試したこと

*paramsの中身を確認
https://gyazo.com/789206c4eac51aad0e09753d29d86158
アイテムの情報が受け取れていないと仮説を立て
*item_id: params[:item_id]と記述を変更。

記述が間違ったためか、別のエラーが発生。
https://gyazo.com/7901b36b38407085547f170cbc10f04e

コードを見直したが、検討もつかないので、質問させていただきました。
添付コードに不測がありましたら、教えていただけると幸いです

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーメッセージと提供されたコードから、item_id パラメータが order_params メソッドに渡されていないようです。Item can't be blank "というエラーメッセージは、item_id 属性が OrderPayment モデルの必須フィールドであり、注文の作成時に設定されていないことを示しています。

この問題を解決するには、item_id パラメータが order_params メソッドに渡されていることを確認する必要があります。投稿されたコードでは、item_id パラメータはインスタンス変数である @item_id として設定されています。しかし、この変数がどこに設定されているのか、その値が何であるのかが不明です。

この問題を解決する1つの方法は、注文を作成するときに、URLでitem_idパラメータを渡すことです。例えば

routes.rb

post '/orders/:item_id', to: 'orders#create'

orders_controller.rb

def create
item_id = params[:item_id].
...
end

この設定で、order_paramsメソッド内のitem_idパラメータに以下のようにアクセスできます。

def order_params
params.require(:order_payment).permit(:post_code, :prefecture_id, :city, :block, :building, :phone_number)
.merge(user_id: current_user.id, item_id: params[:item_id], token: params[:token])
end

これで、注文作成時にitem_id属性が設定されるようになり、「Item can't be blank」というエラーメッセージが解消されるはずです。

投稿2023/02/01 00:31

yori3963

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問