Menu

Category

Archive

logo


Ruby on Rails チュートリアル 7 章 | ユーザー登録

2013-11-18 20:46:00 +0900
  • このエントリーをはてなブックマークに追加

急遽、勉強しなくちゃいけなくなった Ruby on Rails の個人的なまとめ。 http://railstutorial.jp/chapters/sign-up?version=4.0#top

ユーザー登録

RESTアーキテクチャ

実際に動的なページを作っていくということは、アプリケーションをRESTアーキテクチャの習慣に従うということ。これを実現するための簡単な方法として、config/routes.rb に以下の行を追加。

1 # config/routes.rb
2 resources :users
3 # get "users/new”

この resouse :users という行だけで、RESTful なすべてのアクションが利用できるようになる。そのため、get “users/new” という行は削除することができる。

SHOW

まずは、 view を作成する(app/views/users/show.html.erb)。new.html.erb は自動で生成されたが、今回は自分で作成しなければならない。

1 # app/views/users/show.html.erb
2 <%= @user.name %>, <%= @user.email %>

@user はインスタンス変数。これをコントローラー内で定義する。

1 # app/controllers/users_controller.rb
2 def show
3   @user = User.find(params[:id])
4 end

params[:id] はリクエストの値。users/1 であれば、params[:id] はUser.find(1) に置き換わる。

NEW and CREATE

まずは view を form_for メソッドを使って実装。もしエラーがある場合は、 shared/error_messages を表示させている。このエラーがあるかどうかは、shared/_error_messagedにて条件分岐をする。慣習的に、複数の controller に渡る view は sharedディレクトリに格納。

 1 # app/views/users/new.html.erb
 2 <% provide(:title, 'Sign up') %>
 3 <h1>Sign up</h1>
 4 <div class="row"]]
 5   <div class="span6 offset3"]]
 6     <%= form_for(@user) do |f| %>
 7     <%= render 'shared/error_messages' %>
 8  
 9     <%= f.label :name %>
10     <%= f.text_field :name %>
11  
12     <%= f.label :email %>
13     <%= f.text_field :email %>
14  
15     <%= f.label :password %>
16     <%= f.password_field :password %>
17  
18     <%= f.label :password_confirmation, "Confirmation" %>
19     <%= f.password_field :password_confirmation %>
20  
21     <%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
22   <% end %>
23 </div>
24 </div>
 1 # app/views/shared/_error_messages.html.erb 
 2 <% if @user.errors.any? %>
 3   <div id="error_explanation"]]
 4     <div class="alert alert-error"]]
 5       The form contains <%= pluralize(@user.errors.count, "error") %>.
 6     </div>
 7   <ul>
 8 <% @user.errors.full_messages.each do |msg| %>
 9 <li>* <%= msg %></li>
10 <% end %>
11 </ul>
12 </div>
13 <% end %>

form_for メソッドでは user インスタンス変数を使用しているので、それを controller で定義。

1 # app/controllers/users_controller.rb
2 def new
3   @user = User.new
4 end

上記で作成したフォームは submit された時に、/users に対してPOST する。RESTアーキテクチャでは、この操作は create アクションにあたる(上の画像)。よって、 controller で以下のように create アクションを作成。

 1 def create
 2   @user = User.new(user_params)
 3   if @user.save
 4     redirect_to @user
 5   else
 6     render 'new'
 7   end
 8 end
 9  
10 private
11 def user_params
12   params.require(:user).permit(:name, :email, :password, :password_confirmation)
13 end

private 関数は、セキュリティ上、全てのパラメータを無条件で受付ないため。もし、ユーザーの作成、保存が成功したらそのユーザーページにリダイレクト。