質問編集履歴

5

誤字

2020/07/29 22:21

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -378,234 +378,6 @@
378
378
 
379
379
 
380
380
 
381
- Ruby : ruby 2.7.1p83
381
+ ruby 2.7.1
382
-
382
+
383
- Rails : Rails 6.0.3.2
383
+ Rails 6.0.3.2
384
-
385
-
386
-
387
- ### 実現したいこと
388
-
389
-
390
-
391
- ・自分以外のユーザーのプロフィールを編集できないようにする
392
-
393
- ・ユーザーのプロフィールページに置かれたリンクをクリックすることで、編集ページに移動
394
-
395
-
396
-
397
- ### 発生している問題・エラーメッセージ
398
-
399
-
400
-
401
- 上記の機能をprotectedメソッドとして定義してみたのですが、プロフィールの編集のリンクを押したところ、編集ページ(registrations#edit)に入れませんでした。
402
-
403
-
404
-
405
- ブラウザには下記のエラーが表示されています。
406
-
407
-
408
-
409
- ```
410
-
411
- ActiveRecord::RecordNotFound in Users::RegistrationsController#edit
412
-
413
-
414
-
415
- Couldn't find User without an ID
416
-
417
-
418
-
419
- # edit, updateアクションを現在のユーザーのみに限定する
420
-
421
- def correct_user
422
-
423
- @user = User.find(params[:id])
424
-
425
- redirect_to(root_url) unless @user == current_user
426
-
427
- end
428
-
429
- ```
430
-
431
-
432
-
433
-
434
-
435
- ### 該当のソースコード
436
-
437
- Railstutorialを参考にprotectedメソッドにcorrect_userを定義しました。
438
-
439
- ただ、これが原因でエラーが出ているようです。
440
-
441
-
442
-
443
- ```Ruby
444
-
445
- # frozen_string_literal: true
446
-
447
-
448
-
449
- class Users::RegistrationsController < Devise::RegistrationsController
450
-
451
- before_action :authenticate_user!, only: [:edit, :update, :destroy]
452
-
453
- before_action :correct_user, only: [:edit, :update]
454
-
455
-
456
-
457
- def new
458
-
459
- super
460
-
461
- end
462
-
463
-
464
-
465
- def create
466
-
467
- super
468
-
469
- end
470
-
471
-
472
-
473
- def edit
474
-
475
- super
476
-
477
- end
478
-
479
-
480
-
481
- def update
482
-
483
- super
484
-
485
- end
486
-
487
-
488
-
489
- def destroy
490
-
491
- super
492
-
493
- end
494
-
495
-
496
-
497
- protected
498
-
499
-
500
-
501
- # edit, updateアクションを現在のユーザーのみに限定する
502
-
503
- def correct_user
504
-
505
- @user = User.find(params[:id])
506
-
507
- redirect_to root_path unless @user == current_user
508
-
509
- end
510
-
511
-
512
-
513
- end
514
-
515
-
516
-
517
-
518
-
519
- ```
520
-
521
-
522
-
523
- ### 該当のview
524
-
525
- こちらはdeviseと関係なく作成したユーザーのプロフィールページ(users#show)です。
526
-
527
-
528
-
529
- ```Ruby
530
-
531
- <% provide(:title, @user.name) %>
532
-
533
-
534
-
535
- <h3>プロフィール</h3>
536
-
537
- <p>名前 : <%= @user.name %></p>
538
-
539
- <p>メールアドレス: <%= @user.email %></p>
540
-
541
-
542
-
543
- <%= link_to 'プロフィールの編集', edit_user_registration_path(@user) %>
544
-
545
- ```
546
-
547
-
548
-
549
- ### routes.rb
550
-
551
-
552
-
553
- ```Ruby
554
-
555
- Rails.application.routes.draw do
556
-
557
- root 'static_pages#home'
558
-
559
- get '/help', to:'static_pages#help'
560
-
561
- get '/about', to:'static_pages#about'
562
-
563
- get '/contact', to:'static_pages#contact'
564
-
565
- devise_for :users, :controllers => {
566
-
567
- :confirmations => 'users/confirmations',
568
-
569
- :registrations => 'users/registrations',
570
-
571
- :sessions => 'users/sessions'
572
-
573
- }
574
-
575
- devise_scope :user do
576
-
577
- get "sign_in", to:"users/sessions#new"
578
-
579
- delete "sign_out", to:"users/sessions#destroy"
580
-
581
- end
582
-
583
- resources :users, only: [:index, :show]
584
-
585
- end
586
-
587
-
588
-
589
- ```
590
-
591
-
592
-
593
- ### 試したこと、確認したこと
594
-
595
-
596
-
597
- correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。なので、IDが見つからないからユーザーを検索できないというエラーの意味が
598
-
599
-
600
-
601
- 質問に不備がある場合は遠慮なく伝えていただけると幸いです。どうぞよろしくお願いします。
602
-
603
-
604
-
605
- ### 補足情報(FW/ツールのバージョンなど)
606
-
607
-
608
-
609
- Ruby : ruby 2.7.1p83
610
-
611
- Rails : Rails 6.0.3.2

4

記載漏れ

2020/07/29 22:21

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -210,21 +210,395 @@
210
210
 
211
211
 
212
212
 
213
+ ### 試したこと
214
+
215
+ Rspecでregistrations_controllerのテストをしました。
216
+
217
+ そのテストはパスするのですが、そもそも正しいテストを書けているか自信がありません。
218
+
219
+
220
+
221
+ 念のため、以下にテスト内容とテストデータ(FactoryBot)を記載します。
222
+
223
+ ```Ruby
224
+
225
+ require 'rails_helper'
226
+
227
+
228
+
229
+ describe Users::RegistrationsController, type: :controller do
230
+
231
+ let(:user) { create(:user) }
232
+
233
+ let(:other_user) { create(:other_user) }
234
+
235
+
236
+
237
+ # ユーザー情報編集ページの表示をテスト
238
+
239
+ describe 'GET #edit' do
240
+
241
+ # ログインしている場合
242
+
243
+ context 'with logged in' do
244
+
245
+ # edit(ユーザー情報編集)ページの検証
246
+
247
+ it 'responds successfully' do
248
+
249
+ @request.env["devise.mapping"] = Devise.mappings[:user]
250
+
251
+ sign_in user
252
+
253
+ get :edit, params: { id: user.id }
254
+
255
+ expect(response).to have_http_status "200"
256
+
257
+ expect(response).to render_template :edit
258
+
259
+ end
260
+
261
+ end
262
+
263
+ # ログインしていない場合
264
+
265
+ context 'without logged in' do
266
+
267
+ # edit(ユーザー情報編集)ページの代わりにsign_in(ログイン)ページを返すか検証
268
+
269
+ it 'redirect to new_session_path' do
270
+
271
+ @request.env["devise.mapping"] = Devise.mappings[:user]
272
+
273
+ get :edit, params: { id: user.id }
274
+
275
+ expect(response).to have_http_status "302"
276
+
277
+ expect(response).to redirect_to new_user_session_path
278
+
279
+ end
280
+
281
+ end
282
+
283
+ # 他のユーザーでログインしている場合
284
+
285
+ context 'with logged in as other user' do
286
+
287
+ # ルートにリダイレクトされるか検証
288
+
289
+ it 'redirect to root_path' do
290
+
291
+ @request.env["devise.mapping"] = Devise.mappings[:user]
292
+
293
+ sign_in other_user
294
+
295
+ get :edit, params: { id: user.id }
296
+
297
+ expect(response).to have_http_status "302"
298
+
299
+ expect(response).to redirect_to root_path
300
+
301
+ end
302
+
303
+ end
304
+
305
+ end
306
+
307
+
308
+
309
+ end
310
+
311
+ ```
312
+
313
+
314
+
315
+ ```Ruby
316
+
317
+ FactoryBot.define do
318
+
319
+
320
+
321
+ factory :user, class: User do
322
+
323
+ name { 'foo' }
324
+
325
+ email { 'foo@test.com' }
326
+
327
+ password { 'foo123' }
328
+
329
+ password_confirmation { 'foo123' }
330
+
331
+ confirmed_at { Date.today }
332
+
333
+ end
334
+
335
+
336
+
337
+ factory :other_user, class: User do
338
+
339
+ name { 'bar' }
340
+
341
+ email { 'bar@test.com' }
342
+
343
+ password { 'bar123' }
344
+
345
+ password_confirmation { 'bar123' }
346
+
347
+ confirmed_at { Date.today }
348
+
349
+ end
350
+
351
+
352
+
353
+ end
354
+
355
+ ```
356
+
357
+
358
+
359
+ ### 確認したこと
360
+
361
+
362
+
363
+ correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。そのため、IDが見つからないからユーザーを検索できないというエラーの原因がわかりませんでした。
364
+
365
+
366
+
367
+ 1日悩んでわからなかったので、どなたか原因を教えていただけないでしょうか。
368
+
369
+ 質問に不備がある場合は遠慮なく伝えていただけると幸いです。
370
+
371
+
372
+
373
+ どうぞよろしくお願いします。
374
+
375
+
376
+
377
+ ### 補足情報(FW/ツールのバージョンなど)
378
+
379
+
380
+
381
+ Ruby : ruby 2.7.1p83
382
+
383
+ Rails : Rails 6.0.3.2
384
+
385
+
386
+
387
+ ### 実現したいこと
388
+
389
+
390
+
391
+ ・自分以外のユーザーのプロフィールを編集できないようにする
392
+
393
+ ・ユーザーのプロフィールページに置かれたリンクをクリックすることで、編集ページに移動
394
+
395
+
396
+
397
+ ### 発生している問題・エラーメッセージ
398
+
399
+
400
+
401
+ 上記の機能をprotectedメソッドとして定義してみたのですが、プロフィールの編集のリンクを押したところ、編集ページ(registrations#edit)に入れませんでした。
402
+
403
+
404
+
405
+ ブラウザには下記のエラーが表示されています。
406
+
407
+
408
+
409
+ ```
410
+
411
+ ActiveRecord::RecordNotFound in Users::RegistrationsController#edit
412
+
413
+
414
+
415
+ Couldn't find User without an ID
416
+
417
+
418
+
419
+ # edit, updateアクションを現在のユーザーのみに限定する
420
+
421
+ def correct_user
422
+
423
+ @user = User.find(params[:id])
424
+
425
+ redirect_to(root_url) unless @user == current_user
426
+
427
+ end
428
+
429
+ ```
430
+
431
+
432
+
433
+
434
+
435
+ ### 該当のソースコード
436
+
437
+ Railstutorialを参考にprotectedメソッドにcorrect_userを定義しました。
438
+
439
+ ただ、これが原因でエラーが出ているようです。
440
+
441
+
442
+
443
+ ```Ruby
444
+
445
+ # frozen_string_literal: true
446
+
447
+
448
+
449
+ class Users::RegistrationsController < Devise::RegistrationsController
450
+
451
+ before_action :authenticate_user!, only: [:edit, :update, :destroy]
452
+
453
+ before_action :correct_user, only: [:edit, :update]
454
+
455
+
456
+
457
+ def new
458
+
459
+ super
460
+
461
+ end
462
+
463
+
464
+
465
+ def create
466
+
467
+ super
468
+
469
+ end
470
+
471
+
472
+
473
+ def edit
474
+
475
+ super
476
+
477
+ end
478
+
479
+
480
+
481
+ def update
482
+
483
+ super
484
+
485
+ end
486
+
487
+
488
+
489
+ def destroy
490
+
491
+ super
492
+
493
+ end
494
+
495
+
496
+
497
+ protected
498
+
499
+
500
+
501
+ # edit, updateアクションを現在のユーザーのみに限定する
502
+
503
+ def correct_user
504
+
505
+ @user = User.find(params[:id])
506
+
507
+ redirect_to root_path unless @user == current_user
508
+
509
+ end
510
+
511
+
512
+
513
+ end
514
+
515
+
516
+
517
+
518
+
519
+ ```
520
+
521
+
522
+
523
+ ### 該当のview
524
+
525
+ こちらはdeviseと関係なく作成したユーザーのプロフィールページ(users#show)です。
526
+
527
+
528
+
529
+ ```Ruby
530
+
531
+ <% provide(:title, @user.name) %>
532
+
533
+
534
+
535
+ <h3>プロフィール</h3>
536
+
537
+ <p>名前 : <%= @user.name %></p>
538
+
539
+ <p>メールアドレス: <%= @user.email %></p>
540
+
541
+
542
+
543
+ <%= link_to 'プロフィールの編集', edit_user_registration_path(@user) %>
544
+
545
+ ```
546
+
547
+
548
+
549
+ ### routes.rb
550
+
551
+
552
+
553
+ ```Ruby
554
+
555
+ Rails.application.routes.draw do
556
+
557
+ root 'static_pages#home'
558
+
559
+ get '/help', to:'static_pages#help'
560
+
561
+ get '/about', to:'static_pages#about'
562
+
563
+ get '/contact', to:'static_pages#contact'
564
+
565
+ devise_for :users, :controllers => {
566
+
567
+ :confirmations => 'users/confirmations',
568
+
569
+ :registrations => 'users/registrations',
570
+
571
+ :sessions => 'users/sessions'
572
+
573
+ }
574
+
575
+ devise_scope :user do
576
+
577
+ get "sign_in", to:"users/sessions#new"
578
+
579
+ delete "sign_out", to:"users/sessions#destroy"
580
+
581
+ end
582
+
583
+ resources :users, only: [:index, :show]
584
+
585
+ end
586
+
587
+
588
+
589
+ ```
590
+
591
+
592
+
213
593
  ### 試したこと、確認したこと
214
594
 
215
595
 
216
596
 
217
- correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。ため、IDが見つからないからユーザーを検索できないというエラーの原因わかりませんでした。
597
+ correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。、IDが見つからないからユーザーを検索できないというエラーの意味
218
-
219
-
220
-
221
- 1日悩んでわからなかったので、どなたか原因を教えていただけないでしょうか。
598
+
222
-
599
+
600
+
223
- 質問に不備がある場合は遠慮なく伝えていただけると幸いです。
601
+ 質問に不備がある場合は遠慮なく伝えていただけると幸いです。どうぞよろしくお願いします。
224
-
225
-
226
-
227
- どうぞよろしくお願いします。
228
602
 
229
603
 
230
604
 

3

説明不足

2020/07/29 22:20

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,10 @@
140
140
 
141
141
  こちらはdeviseと関係なく作成したユーザーのプロフィールページ(users#show)です。
142
142
 
143
+ 「プロフィールの編集」リンクを押して、プロフィール編集画面に移動する際に上記のエラーがでました。
144
+
145
+ このページは正しく表示されています。
146
+
143
147
 
144
148
 
145
149
  ```Ruby

2

説明不足

2020/07/29 22:11

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
 
4
4
 
5
+ ・deviseでユーザー認証機能を導入したい
6
+
5
- ・自分以外のユーザーのプロフィールを編集できないようにする
7
+ その過程で、自分以外のユーザーのプロフィールを編集できないようにしたい
6
-
8
+
7
- ・ユーザーのプロフィールページに置かれたリンクをクリックすることで、編集ページに移動
9
+ ・ユーザーのプロフィールページに置かれたリンクをクリックすることで、プロフィールの編集ページに移動させたい
8
10
 
9
11
 
10
12
 

1

誤字

2020/07/29 22:09

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -208,11 +208,17 @@
208
208
 
209
209
 
210
210
 
211
- correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。、IDが見つからないからユーザーを検索できないというエラーの意味
211
+ correct_userがなければ編集ページに移動できることは確認しており、その際URLにはユーザーのIDが記載されていました。ため、IDが見つからないからユーザーを検索できないというエラーの原因わかりませんでした。
212
+
213
+
214
+
212
-
215
+ 1日悩んでわからなかったので、どなたか原因を教えていただけないでしょうか。
213
-
214
-
216
+
215
- 質問に不備がある場合は遠慮なく伝えていただけると幸いです。どうぞよろしくお願いします。
217
+ 質問に不備がある場合は遠慮なく伝えていただけると幸いです。
218
+
219
+
220
+
221
+ どうぞよろしくお願いします。
216
222
 
217
223
 
218
224