Rail3でDeviseを使う(その2)

ユーザー自身が登録するのではなく、管理者がユーザーを登録する場合、モデルUserのregistableをコメントアウトする。

この場合、usres_controllerを作ってnew, createしたら、果たして登録できるのかどうか、実験してみた。

はじめにusers_controllerを作る。

> rails generate controller users

続いて、routes.rbにルートを定義

devise_for :users 
resources :users # 必ずdevise_for :usersの次に記述する

続いて、コントローラーにnew, createアクションを定義

def new
  @user = User.new
end

def create
  @user = User.new(params[:user])
  respond_to  do |format|
    if @user.save
      format.html{redirect_to(@user, :notice => 'User was successfully created.')}
    else
      format.html{ render :action => 'new'}
    end
  end
end

続いて、viewにnew.html.erbを作成

<%= form_for(@user) do |f| %>
    <% if @user.errors.any? %>
        <div id="error_explanation">
            <h2><%= pluralize(@user.errors.count, 'error') %> prohibited this user from being saved:</h2>
            <ul>
                <% @user.errors.full_messages.each do |msg| %>
                    <li><%= msg %></li>
                <% end %>
            </ul>
        </div>
    <% end %>
    <div class="field">
      <%= f.label :last_name %>
      <%= f.text_field :last_name %>
    </div>
    <div class="field">
      <%= f.label :first_name %>
      <%= f.text_field :first_name %>
    </div>
        <div class="field">
      <%= f.label :email %>
      <%= f.text_field :email %>
    </div>
        <div class="field">
      <%= f.label :password %>
      <%= f.text_field :password %>
    </div>
        <div class="field">
      <%= f.label :password_confirmation %>
      <%= f.text_field :password_confirmation %>
    </div>
    <%= submit_tag '登録' %>
<% end %>

で登録をしてみると見事に成功。emailを空にすると、しっかりエラーメッセージも表示する!