5.4 用户注册:第一步
为了完成本章的目标,本节要设置“注册”页面的路由,为此要创建第二个控制器。这是允许用户注册重要的第一步,我们会在第 6 章完成第二步,创建用户模型,第 7 章会完成整个功能。
5.4.1 用户控制器
我们在 3.2 节创建了第一个控制器——静态页面控制器。现在要创建第二个,用户控制器。和之前一样,我们使用 generate
命令创建所需的控制器骨架,包含用户注册页面所需的动作。遵照 Rails 使用的 REST 架构约定,我们把这个动作命名为 new
,把 new
作为参数传给 generate
命令就可以自动创建这个动作,如代码清单 5.28 所示。
代码清单 5.28:生成用户控制器(包含 new
动作)
$ rails generate controller Users new
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
create test/helpers/users_helper_test.rb
invoke assets
invoke coffee
create app/assets/javascripts/users.js.coffee
invoke scss
create app/assets/stylesheets/users.css.scss
上述命令会创建用户控制器,以及其中的 new
动作(代码清单 5.30)和一个占位视图(代码清单 5.31)。除此之外还会为新建用户页面生成一个简单的测试(代码清单 5.32),这个测试现在可以通过:
代码清单 5.29:GREEN
$ bundle exec rake test
代码清单 5.30:默认生成的用户控制器,包含 new
动作
app/controllers/users_controller.rb
class UsersController < ApplicationController
def new
end
end
代码清单 5.31:默认生成的 new
动作视图
app/views/users/new.html.erb
<h1>Users#new</h1>
<p>Find me in app/views/users/new.html.erb</p>
代码清单 5.32:新建用户页面的测试 GREEN
test/controllers/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionController::TestCase
test "should get new" do
get :new
assert_response :success
end
end
5.4.2 “注册”页面的 URL
有了前一节生成的代码,现在就可以通过 /users/new 访问新建用户页面。但是参照表 5.1,我们希望这个页面的 URL 是 /signup
。为此,我们要参照代码清单 5.22 的做法,为“注册”页面添加规则 get '/signup'
,如代码清单 5.33 所示。
代码清单 5.33:“注册”页面的路由
config/routes.rb
Rails.application.routes.draw do
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'about' => 'static_pages#about'
get 'contact' => 'static_pages#contact'
get 'signup' => 'users#new' end
然后使用具名路由让首页中的按钮指向正确的地址。和其他路由一样,添加 get 'signup'
后会得到具名路由 signup_path
。我们在代码清单 5.34 中使用这个具名路由。针对“注册”页面的测试留作5.6 节。
代码清单 5.34:使用按钮链接到“注册”页面
app/views/static_pages/home.html.erb
<div class="center jumbotron">
<h1>Welcome to the Sample App</h1>
<h2>
This is the home page for the
<a href="http://www.railstutorial.org/">Ruby on Rails Tutorial</a>
sample application.
</h2>
<%= link_to "Sign up now!", signup_path, class: "btn btn-lg btn-primary" %> </div>
<%= link_to image_tag("rails.png", alt: "Rails logo"),
'http://rubyonrails.org/' %>
最后,编写“注册”页面的临时视图,如代码清单 5.35 所示。
代码清单 5.35:“注册”页面的临时视图
app/views/users/new.html.erb
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<p>This will be a signup page for new users.</p>
现在,我们暂别链接和具名路由,到第 8 章再添加“登录”页面的路由。新创建的用户注册页面如图 5.9 所示。
图 5.9:/signup 地址上的“注册”页面