Ruby on rails を学習中の方の参考にしてもらえたら嬉しいです。
アプリケーションを作成している時に出てくるエラーとその解決方法について掲載します。少しでも参考にしていただけると幸いです。
今回はundefined method 'profile' for #Profile id: nil, user_id: 1, name: "〜 というエラーの解決方法をお話しします。
プロフィールページを作って、入力したのに、ページが保存されていないし、表示がされない。そんな時にはこの記事が参考になるかと思います。
それではいきましょう。
1、今回のエラー画面はこれです
2、今回の現象はこれです。
プロフィール作成画面で文字を入力します。
入力をして保存ボタンを押します↓
上記の画像のようにプロフィールを入力して、保存ボタンを押しても、保存されたか不明であり、新規作成ページにリダイレクトされてしまうというエラーです。
今回はエラーの表示がされていませんが、ページ遷移が思い通りに行っていないので、この間違いを修正していきます。
3、結論はこちら
今回の解決策の結論は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でエラー内容を確認していきます
最初、入力フォームのミスだと思ったので、このように解決策を探していました。
上記の画像の指摘の通り、改善策を試していきます。
正解は①をちゃんと修正すれば良かったのですが、現時点でそれが分からず、全てを確認していきます。
②③④をまとめて修正していくと以下のような箇所に気をつけてくことになります。
5、修正箇所を見ていきます
= form_with (model: @profile, url: profile_path, method: 'put', local: true) do
(以下省略)
このform_withが正しく機能しているか確認します。
(ChatGPTに聞いたらタイポしているか、そもそもコードが間違えているかを教えてくれます)
次はこの画像です。(データベース)
データベースのテーブルのカラム名が正しく紐づいているかを確認します。
この時、t.text :bio
のカラム名が同じになっていなかったので変更しました。
次はこの画像です。(モデル)
まずはuserモデルですが、profileモデルと関連付いているか確認。
みるのはhas_one profile, dependent: :destroy
です。これはオッケーだった。
次はこの画像です。(モデル)
続いて、profileモデルです。
belongs_to :user
となっているか?バリデーションが無茶苦茶なものになっていないか?
たまにこのバリデーションを他からコピペしているとcontentとかbioとか混在してしまうこともあります。
最後にこの画像です。(html > show)
冒頭にもお伝えしたように、4行目5行目6行目の@profile
と直してみたところ解決しました。
結局のところ、ChatGPTに雛形を作ってもらった際に、普段自分では使わない変数名にしていたところを見落としていたわけです。なので、雛形を作ってもそれに満足せずに、コードを確認しなくてはいけませんね。
↓CSSが整っていませんが、名前と自己紹介文とlocationである群馬が入力されるようになりました。
いかがでしたでしょうか?
他にも記事を発信していきますので、私の QiitaやTwitterをフォローしていただけると嬉しいです。
個別の質問もぜひ歓迎します。
私自身、初学者ではありますが、1歩先を行くものとして回答できたらと思います。
それでは。