らくだ🐫にもできるRailsチュートリアル|5.4(と5.5)

5.4 ユーザー登録: 最初のステップ

ユーザー登録ページを作っていく

5.4.1 Usersコントローラ

新規ユーザー用の登録ページを作る
→Usersコントローラを作成
→newアクションを引数にしてgenerateを実行
2.1でやったRESTアーキテクチャの規約に合わせる)

スタブとはなんぞ

スタブ→使い残し、半券、切り株などの意味
未完成の機能の代用になるもの、テスト用の仮のパーツ

ターミナル
$ rails generate controller Users new
Running via Spring preloader in process 4173
      create  app/controllers/users_controller.rb
       route  get 'users/new'
      invoke  erb
      create    app/views/users
      create    app/views/users/new.html.erb
      invoke  test_unit
      create    test/controllers/users_controller_test.rb
      invoke  helper
      create    app/helpers/users_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/users.coffee
      invoke    scss
      create      app/assets/stylesheets/users.scss
      #引数に設定したnewアクションに対応するアクション・ルート・viewも自動的に生成されている

演習

  1. 表 5.1を参考にしながらリスト 5.41を変更し、users_new_urlではなくsignup_pathを使えるようにしてみてください。
  2. 先ほどの変更を加えたことにより、テストが redになったことを確認してください。なお、この演習はテスト駆動開発 (コラム 3.3) で説明した red/green のリズムを作ることを目的としています。このテストは次の5.4.2で greenになるよう修正します。
/sample_app/config/routes.rb
#1.
Rails.application.routes.draw do

  root 'static_pages#home'
  get  '/help',    to:'static_pages#help'
  get  '/about',   to:'static_pages#about'
  get  '/contact', to:'static_pages#contact'
  
  get  '/signup',  to:'users#new'
end
ターミナル(guard)
#2.
ERROR["test_should_get_new", UsersControllerTest, 0.40452832200026023]
 test_should_get_new#UsersControllerTest (0.40s)
NameError:         NameError: undefined local variable or method `users_new_url' for #
#`users_new_url'は未定義的なエラーメッセージ
            test/controllers/users_controller_test.rb:5:in `block in '

  7/7: [==============================================] 100% Time: 00:00:00, Time: 00:00:00

Finished in 0.43794s
7 tests, 16 assertions, 0 failures, 1 errors, 0 skips

ここからテストが通るようにコードを修正していく

5.4.2 ユーザー登録用URL

ユーザー登録用のページへのリンクが/signupになるようにルートを追加
(先ほどの演習1の内容)
→合わせてテストも修正

/sample_app/test/controllers/users_controller_test.rb
require 'test_helper'

class UsersControllerTest < ActionDispatch::IntegrationTest
  test "should get new" do
    get users_new_url    #もともとあるこの行を以下↓に書き換え
    get signup_path    
    assert_response :success
  end

end

本文に沿って
home.html.erbにあるSign up now!のリンクにsignup_pathを追加
new.html.erbを編集

演習

  1. もしまだ5.4.1.1の演習に取り掛かっていなければ、まずはリスト 5.41のように変更し、名前付きルートsignup_pathを使えるようにしてください。また、リスト 5.43で名前付きルートが使えるようになったので、現時点でテストが greenになっていることを確認してください。
  2. 先ほどのテストが正しく動いていることを確認するため、signupルートの部分をコメントアウトし、テスト redになることを確認してください。確認できたら、コメントアウトを解除して greenの状態に戻してください。
  3. リスト 5.32の統合テストにsignupページにアクセスするコードを追加してください (getメソッドを使います)。コードを追加したら実際にテストを実行し、結果が正しいことを確認してください。ヒント: リスト 5.36で紹介したfull_titleヘルパーを使ってみてください。

1.2.は動作確認のみなので省略

/sample_app/test/integration/site_layout_test.rb
・
・
・
    assert_select "a[href=?]", contact_path
    assert_select "a[href=?]", signup_path
    get contact_path
    assert_select "title", full_title("Contact")
    get signup_path
    assert_select "title", full_title("Sign up")
    
  end
end

5.5 最後に

まとめと次回予告&pushとデプロイとまとめ

まとめとか感想

Users登録ページの最初のステップと言う事で
controllerを作ったり名前付きルートを設定したりと、復習的な内容で短めにさっくり出来ました。

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けすと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです