質問編集履歴

3

質問の修正

2022/10/05 01:18

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- DM一覧を表示させたい
1
+ 自分のDM一覧を表示させたい
test CHANGED
@@ -1,6 +1,5 @@
1
1
  ### 困っている箇所
2
- rooms_controllerのindex箇所掲載者userを入れ@anotherEntries箇所でエラーが起こってしまいました。
3
- undefined method `user_id' for nil:NilClass
2
+ DMを作成し、views/rooms/index.html.erbに自身のユーザーが入っているメッセージだけを表示したくてrooms_controllerのindexアクションに自身DM部屋(roomカラム)取得す機能を書いたのですが、エラーが発生してしまい、調べてみたところ、モデル関連が怪しいと思い、room.rbをhas_many :usersを追加してみて修正したのですが、変化しせんでした。
4
3
 
5
4
  エラー
6
5
  ```

2

修正

2022/10/05 01:16

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- undefined method `user_id' for nil:NilClassのエラー解消したい
1
+ DM一覧表示させたい
test CHANGED
File without changes

1

質問の修正

2022/10/04 15:24

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- 自分DM表示させる。
1
+ undefined method `user_id' for nil:NilClassエラー解消したい
test CHANGED
@@ -1,46 +1,58 @@
1
1
  ### 困っている箇所
2
- DMを作成し、views/rooms/index.html.erbに自身のユーザーが入っているメッセージだけを表示したくてrooms_controllerのindexアクションに自身DM部屋(roomカラム)取得す機能を書いたのですが、エラーが発生してしまい、調べてみたところ、モデル関連が怪しいと思い、room.rbをhas_many :usersを追加してみて修正したのですが、変化しせんでした。
2
+ rooms_controllerのindex箇所掲載者userを入れ@anotherEntries箇所でエラーが起こってしまいました。
3
+ undefined method `user_id' for nil:NilClass
3
4
 
4
5
  エラー
5
6
  ```
6
- NoMethodError in RoomsController#index
7
+ NoMethodError at /rooms
7
- undefined method `rooms' for #<User:0x00007fc5890b96d0>
8
+ undefined method `user_id' for nil:NilClass
9
+
10
+ Hint: Something is `nil` when it probably shouldn't be.
11
+ ```
12
+
13
+ rooms_controller
14
+ ```
8
- Extracted source (around line #5):
15
+ class RoomsController < ApplicationController
9
- 3
10
- 4
11
- 5
12
- 6
13
- 7
14
- 8
15
-
16
16
  before_action :authenticate_user!
17
+
17
18
  def index
18
- @my_rooms = current_user.rooms.order(created_at: :desc)
19
+ @currentEntries = current_user.entries
20
+ myRoomIds = []
21
+
22
+ @currentEntries.each do |entry|
23
+ myRoomIds << entry.room.id
24
+ end
25
+
26
+ @anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',@plan.user_id)
19
27
  end
20
28
 
21
29
  def create
30
+ @plan = Plan.find(params[:entry][:plan_id])
31
+ @room = Room.create(room_name: @plan.title)
32
+ @entry1 = Entry.create(room_id: @room.id, user_id: current_user.id)
33
+ @entry2 = Entry.create(params.require(:entry).permit(:user_id, :room_id).merge(room_id: @room.id))
34
+ redirect_to "/rooms/#{@room.id}"
35
+ end
22
36
 
37
+ def show
38
+ @room = Room.find(params[:id])
23
- Rails.root: /home/ubuntu/environment/tsunageru
39
+ if Entry.where(user_id: current_user.id,room_id: @room.id).present?
40
+ @messages = @room.messages
41
+ @message = Message.new
42
+ @entries = @room.entries
43
+ else
44
+ redirect_back(fallback_location: root_path)
45
+ end
46
+ end
47
+
48
+ private
49
+
50
+ def set_plan
51
+ @plan = Plan.find(params[:id])
52
+ end
53
+
54
+ end
24
55
 
25
- Application Trace | Framework Trace | Full Trace
26
- app/controllers/rooms_controller.rb:5:in `index'
27
- Request
28
- Parameters:
29
-
30
- None
31
- Toggle session dump
32
- Toggle env dump
33
- Response
34
- Headers:
35
-
36
- None
37
- ```
38
-
39
- rooms_controller indexアクション
40
- ```
41
- def index
42
- @my_rooms = current_user.rooms.order(created_at: :desc)
43
- end
44
56
  ```
45
57
 
46
58
  room.rb
@@ -48,8 +60,10 @@
48
60
  class Room < ApplicationRecord
49
61
  has_many :entries, dependent: :destroy
50
62
  has_many :messages, dependent: :destroy
51
- has_many :rooms
63
+ has_many :users
64
+ has_many :plans
52
65
  end
66
+
53
67
  ```
54
68
 
55
69
  views/rooms/index.html.erb
@@ -62,4 +76,58 @@
62
76
  </div>
63
77
  ```
64
78
 
79
+ ### 質問
80
+ @anotherEntries = Entry.where(room_id: myRoomIds).where('user_id != ?',@plan.user_id)
81
+ で掲載者のuserを入れたいのですが、user_idがnilの為、@plan = Plan.find(params[:id])でplan_idからplanを抜き出し、さらにそこからplan.user_idを抜き出して@anotherEntries のuser_idに代入させようとしたのですが、
82
+ ```
83
+ ActiveRecord::RecordNotFound at /rooms
84
+ Couldn't find Plan without an ID
85
+ ```
86
+ と表示され,調べたところルーティングに関しての情報が多くあったのですが、
87
+ ルーティングを見ても問題ないと思います。
88
+ @plan = Plan.find(params[:id])でレコードから抜き出すやり方は正しいでしょうか?
89
+
90
+ !追記
91
+ routes.rb
92
+ ```
93
+ Rails.application.routes.draw do
94
+ devise_for :users, controllers: { registrations: 'users/registrations' }
95
+ root to: 'toppages#index'
65
96
 
97
+ get "users/show" => "users#show"
98
+ devise_scope :users do
99
+ get '/users', to: redirect("/users/sign_up")
100
+ end
101
+ resources :users do
102
+ member do
103
+ get :followings
104
+ get :followers
105
+ get :likes
106
+ end
107
+ collection do
108
+ get :search
109
+ end
110
+ end
111
+ resources :users
112
+ resources :plans
113
+ resources :relationships, only: [:create, :destroy]
114
+ resources :favorites, only: [:create, :destroy]
115
+ resources :messages, only: [:create]
116
+ resources :rooms
117
+ end
118
+ ```
119
+
120
+ routes.rb
121
+ ```
122
+ rooms GET /rooms(.:format) rooms#index
123
+ POST /rooms(.:format) rooms#create
124
+ new_room GET /rooms/new(.:format) rooms#new
125
+ edit_room GET /rooms/:id/edit(.:format) rooms#edit
126
+ room GET /rooms/:id(.:format) rooms#show
127
+ PATCH /rooms/:id(.:format) rooms#update
128
+ PUT /rooms/:id(.:format) rooms#update
129
+ DELETE /rooms/:id(.:format) rooms#destroy
130
+ ```
131
+
132
+
133
+