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

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

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

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

Q&A

1回答

666閲覧

Couldn't find User with 'id'= のエラーが解決できません

ythaikaset

総合スコア16

Ruby on Rails

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

0グッド

1クリップ

投稿2019/05/20 10:39

編集2019/05/22 07:00

前提・実現したいこと

railsでlink_toによってパラメータviewからをcontrollerへ受け渡したいのですが、エラーが出てしまいます。
実現したいことはusers/show.html.erbで使っている@userをrooms/show.html.erbでも使うことです。
方法として
users/show.html.erbにて<%= link_to 'チャットルームへ移動', room_path(@roomId), talker_id: @user.id %>によって@user.idを:talker_idとして
rooms_controller.rbにて@user = User.find(params[:talker_id])としてパラメーターを受け取り、rooms/show.html.erbで@userを使おうと考えています。

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

ActiveRecord::RecordNotFound in RoomsController#show Couldn't find User with 'id'= Extracted source (around line #12): 10 def show 11 @room = Room.find(params[:id]) 12 @user = User.find(params[:talker_id]) 13 if Entry.where(:user_id => current_user.id, :room_id => @room.id).present? 14 @messages = @room.messages 15 @message = Message.new Rails.root: C:/Users/yutag/Desktop/otsukai2 Application Trace | Framework Trace | Full Trace app/controllers/rooms_controller.rb:12:in `show' Request Parameters: {"id"=>"2"}

該当のソースコード

users/show.html.erb

erb

1 <div class="chat"> 2 <% if @user.id == current_user.id %> 3 <%= @user.name %> 4 <% else %> 5 <% if @isRoom == true %> 6 <%= link_to 'チャットルームへ移動', room_path(@roomId), talker_id: @user.id %> 7 <% else %> 8 <%= form_for @room do |f| %> 9 <%= fields_for @entry do |e| %> 10 <%= e.hidden_field :user_id, :value=> @user.id %> 11 <% end %> 12 <%= f.submit "おつかいを依頼する", class: 'button' %> 13 <% end %> 14 <% end %> 15 <% end %> 16 </div>

users_controller.rb

ruby

1 def show 2 @user=User.find(params[:id]) #user/showのユーザーid 3 @currentUserEntry=Entry.where(user_id: current_user.id) #current_userの全entryレコード 4 @userEntry=Entry.where(user_id: @user.id) #user/showのユーザーidの全entryレコード 5 if @user.id == current_user.id 6 else 7 @currentUserEntry.each do |cu| #このif文はshowのユーザーとcurrent_userの共通するentryのidを探している 8 @userEntry.each do |u| 9 if cu.room_id == u.room_id then 10 @isRoom = true #すでにroomがある 11 @roomId = cu.room_id 12 end 13 end 14 end 15 if @isRoom 16 else #roomがまだない場合、新しくroomとentryを作る 17 @room = Room.new 18 @entry = Entry.new 19 end 20 end 21

###試したこと
:talker_idを含む文を消すとページ遷移するので、
パラメータの受け渡しがうまくいっていないと考えられます。

補足情報(FW/ツールのバージョンなど)

Rails 5.1.7

原因を特定するのに判断材料が足りていないかもしれないので、その場合はお申し付けくださいませ。
どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

最後のif @isRoomelseに入った場合、@roomIdがセットされないためnilとして扱われ、URL生成時点でエラーとなります。

この場合、「ルームを新規作成したい」か「ない場合はリンクしない」かで、やり方が異なってきます。

投稿2019/05/20 10:48

maisumakun

総合スコア145183

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

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

ythaikaset

2019/05/22 05:00

maisumakunさん ご回答ありがとうございます。 if @isRoomのelseに入った場合は新しくroomを作る操作をしています。 users/show.html.erbを一行しかかいておらずすみません。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問