[rails] いまさらのdevise 初心者向けの備忘録的にメモっておこう

参考:http://ruby-rails.hatenadiary.com/entry/20140801/1406907000

1.インストール

Gemfileに書いてバンドル。

2.deviseの各ファイルをプロジェクト内に展開

こういうのが大体書いてない。書いてないhowto系は爆発すればいい。

rails g devise:install

これを打つと

$ rails g devise:install
      create  config/initializers/devise.rb
      create  config/locales/devise.en.yml
===============================================================================

Some setup you must do manually if you haven't yet:

  1. Ensure you have defined default url options in your environments files. Here
     is an example of default_url_options appropriate for a development environment
     in config/environments/development.rb:

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

     In production, :host should be set to the actual host of your application.

  2. Ensure you have defined root_url to *something* in your config/routes.rb.
     For example:

       root :to => "home#index"

  3. Ensure you have flash messages in app/views/layouts/application.html.erb.
     For example:

       <p class="notice"><%= notice %></p>
       <p class="alert"><%= alert %></p>

  4. If you are deploying on Heroku with Rails 3.2 only, you may want to set:

       config.assets.initialize_on_precompile = false

     On config/application.rb forcing your application to not access the DB
     or load models when precompiling your assets.

  5. You can copy Devise views (for customization) to your app by running:

       rails g devise:views

===============================================================================

と。あとは基本的に手順を順番にこなしていく形になります。

3.deviseのメール送信時のホスト名を指定

config/environments/development.rbに追記する

# config/environments/development.rb
Rails.application.configure do
  ...
  # deviseの設定
  config.action_mailer.default_url_options = { host: 'localhost:3000' }
  ...
end

productionモードでは、host:に実際のサーバーの値を設定しましょう。

4.root_urlを指定

deviseはログアウト時などのリダイレクト先としてroot_urlを使う そうです。ここ重要。

# config/routes.rb
  ...
  root to: "home#index"
  ...

5.エラーメッセージの処理

deviseはログインやログアウトなどのときに、flashにサクセスやエラーメッセージを追加する そうです。ここも重要。

# app/views/layouts/application.html.erb
....
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>

<%= yield %>

</body>
</html>

6.手順4で提示されているものはスキップ

rails 3.2 の人だけやってください。

5は、Viewをカスタマイズしたいときのため必要であり、今はインストールのみのためスキップします。

7.Viewのカスタマイズ

rails g devise:views とコマンドを走らせます。

# rails g devise:views
      invoke  Devise::Generators::SharedViewsGenerator
      create    app/views/devise/shared
      create    app/views/devise/shared/_links.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

rails3の時代で提供されていたdeviseではhamlでのgenerateがあったようですが、色々問題があるらしく消されたとのこと。 面倒ですが、gemのhtml2hamlを入れて一回generateしたあとに魔法の言葉で置換しましょう。

# gem install html2haml
      Fetching: html2haml-2.0.0.gem (100%)
      Successfully installed html2haml-2.0.0
      1 gems installed
# for file in app/views/devise/**/*.erb; do html2haml -e $file ${file%erb}haml && rm $file; done

後者のfor文は実行しても何もレスポンスないですが、きっちりファイルが置換されているはず。確認しましょう。

8.モデルの作成

rails g devise [モデル名]で作成。 下ではUserで作成。まぁこんなもん大体UserとかAdminとかでしょ。

# rails g devise User
      invoke  active_record
      create    db/migrate/20150127110429_devise_create_users.rb
      create    app/models/user.rb
      invoke    rspec
      create      spec/models/user_spec.rb
      insert    app/models/user.rb
       route  devise_for :users

モデルを作ったので、rake db:migrateで、migrateしましょう。

こういう基礎的な事こそまとめておきたかったのと Wordpress内にマークダウン書式が使えるというプラグインを入れたので試してみたw

以上。

機械忍者

某SEO会社(?)勤務。 多分日本語よりHTMLの方が得意です。 最近はRubyとかいうキラキラな言語も勉強中です。 SEOはもう標準スキルになってきてると思うので正直もうあんまり昔ほどの熱意は感じません。 新たに躍動してる人も多いですしね。 だれか強化骨格コスプレあったら教えてください。