deviseでログアウト後のURLを変更する

ログアウト後のURLを変更するときも、ログインの時と同じ方法で設定ができます。

下の例ではログイン画面に遷移しています。

  • app/controllers/application_controller.rb
def after_sign_out_path_for(resource)
  new_user_session_path
end

参考:
https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign_in,-sign_out,-and-or-sign_up

deviseでログイン後のURLを変更する

application_controller.rbに次のメソッドを追加して、処理を上書きします。

  • app/controllers/application_controller.rb
def after_sign_in_path_for(resource)
  user_path
end

参考:
https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign_in,-sign_out,-and-or-sign_up

Railsのview helperでhtmlタグを出力する

divタグを出力する例は以下の通りです。

content_tag(:div, class: 'class1 class2')

出力結果

<div class="class1 class2">
</div>

最初のタグだけ出したい場合は以下のようにします。

tag(:div, class: 'class1 class2')

出力結果

<div class="class1 class2">

大きな外枠で条件分岐をしたい時に便利ですが、閉じタグを入れ忘れないように注意が必要です。

Railsでバリデーションのメッセージを登録する

ここを見れば、どのような階層で翻訳されているのかわかります。

http://guides.rubyonrails.org/i18n.html#error-message-scopes

はじめはこのように書いていました。

errors.add(:url, I18n('activerecord.errors.messages.non_exist_url'))

正しい階層で書いておけば、ここまで省略できます。

errors.add(:url, :non_exist_url'))

よくわからないときは、メッセージを抜いてエラーを発生させてみましょう。

そうすれば、translation missingでどこを見に行っているかわかります。

Railsのロケールファイルを分割する

システムの規模が大きくなってくると、ロケールファイルが肥大してきます。

そんなときは、ロケールを分割して読み込める設定をしましょう。

  • config/application.rb
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

下の例ではlocalesにmodelsというディレクトリを作成しています。

├── ja.yml
└── models
    └── ja.yml