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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

685閲覧

railsでparamsを使ったデータの受け渡しの際、idが消える

masa98765

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/10/13 03:45

前提・実現したいこと

rails初心者です。
現在railsで質問投稿サイトを制作しています。
paramsを使いデータの受け渡しをする際にエラーが発生しました。

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

エラーメッセージ AnswersTestTest#test_answer生成: ActiveRecord::RecordNotFound: Couldn't find Question without an ID app/controllers/answers_controller.rb:9:in `show' test/integration/answers_test_test.rb:15:in `block in <class:AnswersTestTest>' ### 該当のソースコード routes.rb get '/new_answer' => 'answers#show' resources :answers, only: [:create, :destroy] エラー出るアクションへのリンク <h3>質問内容</h3> <div class="question"> <p><%= @question.content %></p> </div> <%= link_to "回答する", new_answer_path(@question) %> answers_controller def show @user = current_user @question = Question.find(params[:id]) @answer = Answer.new(user_id: @user.id, question_id: @question.id) end answers_test_test.rb test "answer生成" do log_in_as(@user) get new_answer_path(@question) assert_template 'answers/show' assert_difference 'Answer.count', 1 do post answer_path, params: { answer: { content: "Lorem ipsum" } } end follow_redirect! assert_template 'home_pages/home' end ```ここに言語名を入力 ruby 2.6.3p62 Rails 5.1.6 sqlite3 1.3.13 開発環境 cloud9 ### 試したこと エラーの出るアクションへのリンクのあるページでは、questionオブジェクトは正常に動いています。(question.contentなども正しく出力されています) paramsの使い方に問題があるように思うのですが、自力では解決できませんでした。 よろしくお願いします。 ### 補足情報(FW/ツールのバージョンなど)

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

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

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

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

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

guest

回答1

0

ベストアンサー

new_answer_path というのは routes.rb にて resources :answes で作りましたか?
edit, showの場合はパラメータとしてidが送られますが、newの場合は新規作成ですのでidがつくことはないのでは、と思います。
new_answer_path(id: @question.id) としてみて下さい。

ただ、
AnswerのnewのidがQuestionというのは違和感があります。
私ですと new_answer_path(question_id: @question.id) にします。

投稿2019/10/13 05:17

winterboum

総合スコア23329

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

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

masa98765

2019/10/13 05:53 編集

回答ありがとうございます。 わかりづらいコードで申し訳ありません。 new_answer_path は routes.rb にて resources :answes で作っていません。 機能はnewに相当する部分なのですが、idを送ることが必要でした。newアクションを利用してデータを送信する方法がわからなかったので、showアクションで代用しました。new_answer_pathにアクセスすると、showアクション実行されるようにルーターに記述してあります(ルーターのコードも質問文に記載してあります)。 また、 new_answer_path を resources :answes で作り(newアクションを利用する)、new_answer_path(id: @question.id)としても同じエラーが出てしまいます。
winterboum

2019/10/13 05:47

routes.rb と new_answer_path を呼んだ時の logを見てていただけますか
masa98765

2019/10/13 06:07

routes.rb Rails.application.routes.draw do root 'home_pages#home' get '/signup' => 'users#new' post '/signup' => 'users#create' get '/login' => 'sessions#new' post '/login' => 'sessions#create' delete '/logout' => 'sessions#destroy' get '/new_answer' => 'answers#show' resources :users resources :questions, only: [:new, :show, :create, :destroy] resources :answers, only: [:create, :destroy] end ログというものがよくわからないです。ターミナルに表示されているものでよろしいでしょうか? Started GET "/new_answer?question_id=8" for 111.239.181.231 at 2019-10-13 06:02:31 +0000 Cannot render console from 111.239.181.231! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255 Processing by AnswersController#show as HTML Parameters: {"question_id"=>"8"} User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Completed 404 Not Found in 2ms (ActiveRecord: 0.2ms) ActiveRecord::RecordNotFound (Couldn't find Question without an ID): app/controllers/answers_controller.rb:9:in `show'
masa98765

2019/10/13 06:16

解決しました。 先ほどnew_answer_path を resources :answes で作り(newアクションを利用する)、new_answer_path(id: @question.id)としても同じエラーが出てしまっていたのですが、自分のタイピングミスがありました。 ありがとうございました。
winterboum

2019/10/13 09:26

よございました。 logというのは(でヴぇぉpめんtの場合は、大抵は)consoleに出るものと一緒ですが、Rails.root/log のしたに 環境名.log で記録されているかと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問