質問編集履歴
3
質問の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
DM一覧を表示させたい
|
1
|
+
自分のDM一覧を表示させたい
|
test
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
### 困っている箇所
|
2
|
-
rooms_controllerのindex
|
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
修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
DM一覧を表示させたい
|
test
CHANGED
File without changes
|
1
質問の修正
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
undefined method `user_id' for nil:NilClassのエラーを解消したい
|
test
CHANGED
@@ -1,46 +1,58 @@
|
|
1
1
|
### 困っている箇所
|
2
|
-
|
2
|
+
rooms_controllerのindex箇所の掲載者のuserを入れる@anotherEntriesの箇所でエラーが起こってしまいました。
|
3
|
+
undefined method `user_id' for nil:NilClass
|
3
4
|
|
4
5
|
エラー
|
5
6
|
```
|
6
|
-
NoMethodError
|
7
|
+
NoMethodError at /rooms
|
7
|
-
undefined method `r
|
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
|
-
|
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
|
-
@
|
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
|
-
|
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 :r
|
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
|
+
|