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

Cronでタイムゾーンを設定する

crontabで開いたファイルの先頭に以下を追加します。

例では東京時間で設定しています。

CRON_TZ=Asia/Tokyo

反映にはcronの再起動が必要です。

sudo /etc/crontab restart