アナログ金木犀

つれづれなるまままにつれづれする

devise導入してユーザ登録時にemailとpassword以外の項目を追加するところまで

AndroidのContentProviderよりも実装する機会がなく毎回調べてる気がするので(というか今まで数回しかないのだけど)、さすがにメモ。

1. deviseをプロジェクトに導入.

Gemfileに次の行を追加する。

gem devise

そして

bundle install

2. deviseのセットアップ

rails g devise:install

3. deviseの環境設定

config/engironments/development.rbに次の行を追加。

config.action_mailer.default_url_options = { :host => 'localhost:3000' }

また app/views/layouts/application.html.hamlを開いて (hamlでやってます。)

  - if notice
    %p{class: "alert alert-success"}
      = notice
  - if alert
    %p{class: "alert alert-danger"}
      = alert

=yealdの上に追加する。

4.User Modelをセットアップ

下記コマンドを実行。

rails g devise user
rake db:migrate

5. ユーザーを作ってみる。

http://localhost:3000/users/sign_up を開いて作成してみる。

6. 登録画面をカスタマイズしてみる

現状だと登録画面にはemailとパスワードしか表示されていない。 さらにnameというfieldも追加してみる。

まずはdeivse viewを作成.

rails g devise:views
      invoke  Devise::Generators::SharedViewsGenerator
      create    app/views/devise/shared
      create    app/views/devise/shared/_links.html.erb
      invoke  form_for
      create    app/views/devise/confirmations
      create    app/views/devise/confirmations/new.html.erb
      create    app/views/devise/passwords
      create    app/views/devise/passwords/edit.html.erb
      create    app/views/devise/passwords/new.html.erb
      create    app/views/devise/registrations
      create    app/views/devise/registrations/edit.html.erb
      create    app/views/devise/registrations/new.html.erb
      create    app/views/devise/sessions
      create    app/views/devise/sessions/new.html.erb
      create    app/views/devise/unlocks
      create    app/views/devise/unlocks/new.html.erb
      invoke  erb
      create    app/views/devise/mailer
      create    app/views/devise/mailer/confirmation_instructions.html.erb
      create    app/views/devise/mailer/reset_password_instructions.html.erb
      create    app/views/devise/mailer/unlock_instructions.html.erb

hamlに変換。(haml-railsとerb2hamlを入れてる必要があり。)

rake haml:replace_erbs

app/views/devise/registrations./new.html.hamlに下記を挿入。

  .field
    = f.label :name
    %br/
    = f.text_field :name

つぎにdeviseのcontrollerを生成。

rails g devise:controllers users

routingは下記のように設定。

devise_for :users, :controllers => {
    :registrations => 'users/registrations'
}

生成されたUsers::RegistrationsControllerを編集。

# コメントを外す
before_filter :configure_sign_up_params, only: [:create]
:
# コメントを外す
def create
  super
end
:
# コメントを外す
protected
:
# コメントを外して  :attribute となっているのを [:name] に変更
def configure_sign_up_params
  devise_parameter_sanitizer.for(:sign_up) << [:name]
end

以上で、挙動確認して完了。

みんな使ってるけど、なんども実装するところじゃないのでやっぱり忘れますね^^;