LoginSignup
0
0

【解決方法】ndefined method 'profile' for #Profile id: nil, user_id: 1, name: "〜 とは?

Last updated at Posted at 2023-08-20

Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回はundefined method 'profile' for #Profile id: nil, user_id: 1, name: "〜 というエラーの解決方法をお話しします。
プロフィールページを作って、入力したのに、ページが保存されていないし、表示がされない。そんな時にはこの記事が参考になるかと思います。

それではいきましょう。

1、今回のエラー画面はこれです

スクリーンショット 2023-08-19 7.12.20.png

2、今回の現象はこれです。

プロフィール作成画面で文字を入力します。
スクリーンショット 2023-08-19 7.16.48.png
入力をして保存ボタンを押します↓
スクリーンショット 2023-08-18 7.08.23.png
上記の画像のようにプロフィールを入力して、保存ボタンを押しても、保存されたか不明であり、新規作成ページにリダイレクトされてしまうというエラーです。
今回はエラーの表示がされていませんが、ページ遷移が思い通りに行っていないので、この間違いを修正していきます。

3、結論はこちら

スクリーンショット 2023-08-21 6.18.16.png
今回の解決策の結論はprofileページのshow.html.hamlのファイルの中の

profile > show.html.haml
.user-info
  = image_tag current_user.avatar_image, class: 'profile-avat:
  %h2= @profile. name 
  %p= @profile.bio 
  %p= @profile. location

というコードの中の@plofileを元々@userにしていました。なので、画像のように@plofileとしてあげました。元はというと、ChatGPTに雛形を作ってもらったコードでした。
GPTがイケてないというつもりではなく、私自身が変数のあたりをよく確認できていなかったのが、今回のエラーの原因でした。
頼り切ってしまっているとダメですね。

4、ではChatGPTでエラー内容を確認していきます

最初、入力フォームのミスだと思ったので、このように解決策を探していました。
スクリーンショット 2023-08-21 6.14.28.png
上記の画像の指摘の通り、改善策を試していきます。
正解は①をちゃんと修正すれば良かったのですが、現時点でそれが分からず、全てを確認していきます。
②③④をまとめて修正していくと以下のような箇所に気をつけてくことになります。

5、修正箇所を見ていきます

まずはこの画像です。(html)
スクリーンショット 2023-08-21 6.15.14.png

profile > new.html.haml
= form_with (model: @profile, url: profile_path, method: 'put', local: true) do
(以下省略)

このform_withが正しく機能しているか確認します。
(ChatGPTに聞いたらタイポしているか、そもそもコードが間違えているかを教えてくれます)

次はこの画像です。(データベース)
スクリーンショット 2023-08-21 6.15.23.png
データベースのテーブルのカラム名が正しく紐づいているかを確認します。
この時、t.text :bioのカラム名が同じになっていなかったので変更しました。

次はこの画像です。(モデル)
まずはuserモデルですが、profileモデルと関連付いているか確認。
みるのはhas_one profile, dependent: :destroyです。これはオッケーだった。
スクリーンショット 2023-08-21 6.16.25.png
次はこの画像です。(モデル)
続いて、profileモデルです。
スクリーンショット 2023-08-21 6.16.40.png

belongs_to :userとなっているか?バリデーションが無茶苦茶なものになっていないか?
たまにこのバリデーションを他からコピペしているとcontentとかbioとか混在してしまうこともあります。

最後にこの画像です。(html > show)
スクリーンショット 2023-08-21 6.18.16.png
冒頭にもお伝えしたように、4行目5行目6行目の@profileと直してみたところ解決しました。

結局のところ、ChatGPTに雛形を作ってもらった際に、普段自分では使わない変数名にしていたところを見落としていたわけです。なので、雛形を作ってもそれに満足せずに、コードを確認しなくてはいけませんね。

↓CSSが整っていませんが、名前と自己紹介文とlocationである群馬が入力されるようになりました。
スクリーンショット 2023-08-20 7.10.29.png

いかがでしたでしょうか?
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0