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

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

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

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

Q&A

解決済

1回答

409閲覧

ruby 投稿機能の実装 undefined method `id' for nil:NilClassの解決

forest0720

総合スコア5

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/04 13:29

編集2020/08/05 00:24

イメージ説明

投稿機能実装中に発生したエラーが解決出来ないのでご教授お願い致します。
def show
@toppage = TopPage.find(params[:id])
@comment = Response.new
@comments = @toppage.responses.includes(:user)
end
個人的にこの部分が間違ってると思うのですがよくわからず。。。。

top_page>show.html.haml

ruby:qiita.rb

1.main 2 = form_for @comment, url:{controller: 'responses', action: 'create'}do |f| 3 .main__consultation 4 .main__consultation__title 5 お悩み一覧 6 .main__consultation__text 7 = @toppage.contents 8 .main__comment 9 = f.text_area :comment, class: "main__comment__form" 10 .main__comment__sent 11 = f.submit "投稿する" 12 .main__comment__text 13 <コメント一覧> 14 -if @comments  15 -@comments.each do |response| 16 .main__comment__main 17 .main__comment__main__name 18 = response.user.name 19 .main__comment__main__form 20 = response.comment

top_page.contoroller.rb

ruby:qiita.rb

1class TopPageController < ApplicationController 2 def index 3 @toppages = TopPage.all 4 end 5 6 def new 7 @toppage = TopPage.new 8 end 9 10 def create 11 TopPage.create(top_page_params) 12 redirect_to top_page_index_path 13 end 14 15 def show 16 @toppage = TopPage.find(params[:id]) 17 @comment = Response.new 18 @comments = @toppage.responses.includes(:user) 19 end 20 21 private 22 def top_page_params 23 params.require(:top_page).permit(:contents,:name).merge(user_id: current_user.id) 24 end 25end

responses_controller.rb

ruby:qiita.rb

1class ResponsesController < ApplicationController 2 def create 3 Response.create(response_params) 4 redirect_to root_path 5 end 6 7 private 8 def response_params 9 params.require(:response).permit(:comment).merge(user_id: current_user.id, top_page_id: params[:top_page_id]) 10 end 11end

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

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

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

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

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

guest

回答1

0

ベストアンサー

codeでは
= form_for @comment, url:{controller: 'responses', action: 'create'}do
ですが、エラーは @comments と複数形になっています。
単数計のcodeの状態ではどんなエラーになりますか?

なお、
model が Responses なので、@response のほうが無用な混乱、勘違いが起きにくいのでベターです。
現に私がこの質問を読むときに
comment なのになぜ コントローラーがresponseなのだろう、、、と思考が停止していました。
及び、
= form_for @comment do でお望みのactionに行きます。routes.rbが正しければ。

投稿2020/08/04 23:02

winterboum

総合スコア23329

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

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

forest0720

2020/08/05 00:25

ご回答ありがとうございます。 大変申し訳ないのですが、誤ったエラー画像貼っており、もう一度突っかかっている エラー画像貼り直したので見ていただけないでしょうか。。。
winterboum

2020/08/05 02:17

このエラーですと id を見ているのはcurrent_user ですが、Loginしないでここ呼んで居ますか? 他の場所でcurrent_uerを使って居るところで問題はでていませんか?
forest0720

2020/08/05 08:19

なるほど、、、ログインしておりませんでした。。。 初歩的な事ですみません助かりました。 ありがとうございます。
winterboum

2020/08/05 10:45

Loginしていない時の処理をこの際つけましょう
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問