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を空にすると、しっかりエラーメッセージも表示する!