##ユーザー登録: 最初のステップ
この節では、レイアウトとルーティングの取り組みにおける頂点として、ユーザー登録ページへのルーティングを作成
2番目のコントローラを作成
することになります。
これは、Webサイトでユーザー登録を行えるようにするため
の最初の重要な一歩となります
次の一歩であるユーザーのモデリングは第6章で行い、第7章でユーザー登録が完成。
###Userコントローラ
最初のコントローラであるStaticPagesコントローラを作成
2番目のコントローラであるUsersコントローラを作成
generate
を実行して、現時点での要求である新規ユーザー用のユーザー登録ページ(スタブ)を持つ
、最も簡単なコントローラを作成
Railsで好まれているRESTアーキテクチャの規約に従い、新規ユーザー用のアクションをnew
を使う。
generate controllerの引数にnew
を渡して、自動的にアクションを作成
してみましょう。
####Usersコントローラの生成
ubuntu:~/environment/sample_app (filling-in-layout) $ rails generate controller Users new
Running via Spring preloader in process 4431
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 scss
create app/assets/stylesheets/users.scss
new
アクションを持つUsersコントローラ
と、スタブのユーザービューを作成
します。
####newアクションを持つ最初のUsersコントローラ
class UsersController < ApplicationController
def new
end
end
####Users用の最初のnewアクション
<h1>Users#new</h1>
<p>Find me in app/views/users/new.html.erb</p>
####Userページ用の最初のテスト
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
test "should get new" do
get users_new_url
assert_response :success
end
end
ubuntu:~/environment/sample_app (filling-in-layout) $ rails t
Running via Spring preloader in process 3245
Started with run options --seed 838
8/8: [==============================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.31576s
8 tests, 17 assertions, 0 failures, 0 errors, 0 skips
####演習
1.users_new_urlではなくsignup_pathを使えるようにしてみてください。
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
test "should get new" do
get signup_path
assert_response :success
end
end
2.先ほどの変更を加えたことにより、テストが red になったことを確認してください。
ubuntu:~/environment/sample_app (filling-in-layout) $ rails t
Running via Spring preloader in process 3790
Started with run options --seed 60200
ERROR["test_should_get_new", #<Minitest::Reporters::Suite:0x00005650d43b6368 @name="UsersControllerTest">, 1.309806750000007]
test_should_get_new#UsersControllerTest (1.31s)
NameError: NameError: undefined local variable or method `signup_path' for #<UsersControllerTest:0x00005650d43b28d0>
test/controllers/users_controller_test.rb:5:in `block in <class:UsersControllerTest>'
8/8: [==============================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.39807s
8 tests, 16 assertions, 0 failures, 1 errors, 0 skips
NameError: undefined local variable or method `signup_path'
signup_pathがないらしい。