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

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

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

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

Q&A

0回答

832閲覧

新規投稿ページへ移行したい

sakanatyann

総合スコア0

Ruby

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

Ruby on Rails

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

ルーティング

ルーティングとは、TCP/IPネットワークにおいて、目的のホストまでパケットを送る為のパス選定のプロセスを言います。

0グッド

0クリップ

投稿2020/12/18 14:06

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
Ruby on Railsでアプリをつくっていますがcomic#showのページからroom#index
そしてmessageの新規投稿ページへ移動したいのですが、移動できない

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

Error

1NoMethodError in Rooms#index 2Showing /Users/tomuchan/projects/manga_keijibanのコピー/app/views/rooms/index.html.erb where line #19 raised:

roomindex

1 2<%= link_to '新規投稿する', new_comic_room_message_path(@comic, @room) %> 3

messageController

1 2class MessagesController < ApplicationController 3 4 def index 5 end 6 7 def new 8 @message = Message.new 9 end 10 11 def create 12 @room = Room.find(params[:id]) 13 @message = Message.new(message_params) 14 @message.save 15 end 16 17private 18 19def room_params 20 params.require(:room).permit(:name).merge(user_id: current_user.id, comic_id: params[:comic_id]) 21end 22 23 24 25def message_params 26 params.require(:message).permit(:nickname, :text).merge(comic_id: params[:comic.id], room_id: params[:room_id]) 27end 28 29end

試したこと

undefined method `id' for nil:NilClassとありidが存在しないとのことなので
@comic,@roomをlink_toメソッドに追記するも

error

1ActionController::UrlGenerationError in Rooms#index 2Showing /Users/tomuchan/projects/manga_keijiban/app/views/rooms/index.html.erb where line #19 raised: 3 4No route matches {:action=>"new", :comic_id=>nil, :controller=>"messages", :room_id=>nil}, missing required keys: [:comic_id, :room_id]

と別のエラーが生じる、ルーティングでネストしているからか複雑になっているのかもしれない

route

1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'comics#index' 4 resources :comics, only: [:index, :new, :create, :show] do 5 resources :rooms, only: [:index, :new, :create, :show] do 6 resources :messages, only:[:new, :create] 7 end 8 end 9end 10

railsroutes

1 comic_room_messages POST /comics/:comic_id/rooms/:room_id/messages(.:format) messages#create 2 new_comic_room_message GET /comics/:comic_id/rooms/:room_id/messages/new(.:format) messages#new 3 comic_rooms GET /comics/:comic_id/rooms(.:format) rooms#index 4 POST /comics/:comic_id/rooms(.:format) rooms#create 5 new_comic_room GET /comics/:comic_id/rooms/new(.:format) rooms#new 6 comic_room GET /comics/:comic_id/rooms/:id(.:format) rooms#show 7 comics GET /comics(.:format) comics#index 8 POST /comics(.:format) comics#create 9 new_comic GET /comics/new(.:format) comics#new 10 comic GET /comics/:id(.:format) comics#show

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

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

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

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

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

sakanatyann

2020/12/18 14:24

すみませんありがとうございます前のは消しときます
m.ts10806

2020/12/18 14:25

いえ、どちらかというとこちらの質問を削除されたほうが。 質問を編集すると質問一覧の「アクティブ」に上がってくるので。
sakanatyann

2020/12/18 14:28

素早い回答ありがとうございます、ただすみません、もう削除リクエスト送ってしまいました(泣)
m.ts10806

2020/12/19 00:05

なるほど。 ただ、結局はルーティングとリクエストパラメータ、コントローラの整合性部分だけだと思います。 設定どおりに全ての要素が準備されているかどうか、そもそも「どういうルート(URL)でアクセスさせたいのか」要件部分を整理されたほうが良いかと思います。おそらく整理していくだけで自己解決に繋がります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問