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

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

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

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

Q&A

解決済

1回答

374閲覧

フリマアプリにて商品投稿機能を実装 NNoMethodError in Items#newについて

NI12929

総合スコア3

Ruby on Rails

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

0グッド

0クリップ

投稿2023/01/31 06:19

前提

フリマアプリにて商品投稿を実装
投稿ページまで表示させることができたのですが、
ビューのformで持ってきたい情報を入力するとエラーにかかり1日苦戦しています。
エラー箇所をモデル名を外した場合はビューは反映されているのでform書き方か
値を持ってこれていないと仮説を立てました。
エラーより、undefined method `key?' for nil:NilClass
keyが定義されていない?呼び出そうとした?けど定義されていないというところから
ルーティング、MVCを確認しバリデーションも問題なさそうと判断しましたが未だに原因特定できず
お知恵をおかり出来れば幸いです。

素人で

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

NoMethodError in Items#new Showing /Users/admin/projects/furima-38877/app/views/items/new.html.erb where line #9 raised: undefined method `key?' for nil:NilClass Extracted source (around line #9): <h2 class="items-sell-title">商品の情報を入力</h2> <%# <%= form_with local: true do |f| %> %> <%= form_with(model: @item, local: true ) do |f| %> <%# インスタンスを渡して、エラー発生時にメッセージが表示されるようにしましょう。%> <%# render 'shared/error_messages', model: f.object %>

該当のソースコード

**controller** def index @item = Item.all end def new @item = Item.new @item = Category.all @item = Postage.all @item = Condition.all @item = Prefecture.all @item = Preparation.all end def create @item = Item.new(item_params) if @item.save redirect_to root_path else render :new end end private def item_params params.require(:item).permit(:image, :item_name, :explanation, :category_id, :condition_id, :postage_id, :prefecture_id, :preparation_id, :price).merge(user_id: current_user.id) end end
**model** belongs_to :user has_one_attached :image # has_one :order extend ActiveHash::Associations::ActiveRecordExtensions belongs_to :category belongs_to :condition belongs_to :postage belongs_to :prefecture belongs_to :preparation with_options presence: true do validates :image validates :item_name validates :explanation validates :price, numericality: { greater_than_or_equal_to: 300, less_than_or_equal_to: 9_999_999 } # カテゴリー validates :category_id,numericality: { other_than: 1 , message: "can't be blank"} # 商品の状態 validates :condition_id,numericality: { other_than: 1 , message: "can't be blank"} # 配送料の負担 validates :postage_id,numericality: { other_than: 1 , message: "can't be blank"} # 都道府県 validates :prefecture_id,numericality: { other_than: 1 , message: "can't be blank"} # 発送までの日数 validates :preparation_id,numericality: { other_than: 1 , message: "can't be blank"} end
**view** <div class="items-sell-contents"> <header class="items-sell-header"> <%= link_to image_tag('furima-logo-color.png' , size: '185x50'), "/" %> </header> <div class="items-sell-main"> <h2 class="items-sell-title">商品の情報を入力</h2> <%# <%= form_with local: true do |f| %> %> <%= form_with(model: @item, local: true ) do |f| %> <%# render 'shared/error_messages', model: f.object %>

試したこと

バリデーションに相違がないか、
ルーティングの設定はされているか。
パラムスの値に相違がないか。
binding.pryを試しましたがnillとなり、どこを直せばよいのか分からなくなってしまいました。。。

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

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

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

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

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

yuma.inaura

2023/01/31 06:37

提示コードではモデル名、コントローラー名の部分まで載せておきませんか
NI12929

2023/02/01 04:10

不慣れで申し訳ありけありません。 これでは確かに該当箇所が分かりませんね。。。 以降気をつけます。 ご指摘ありがとうございました。
guest

回答1

0

自己解決

特定ができませんでしたが、表示されるようになりました。

投稿2023/02/01 04:12

NI12929

総合スコア3

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問