Railsプロジェクトを作ったときにまずやる事

## はじめに
[前回の記事](http://qiita.com/syou007/items/80ef7744423a98be138f)に書いたもののプロジェクト編です。

Railsプロジェクトを作成した後にほぼ必ず行う事を記載しておきます。

## Railsプロジェクト作成
必ずやる事ですが、たまにコマンドを忘れるので一応メモ

```sh
$ rails new プロジェクト名 -d mysql
```

## application.rbの変更
i18nの階層対応とタイムゾーンの設定をします。

```rb:config/application.rb
module アプリ名
  class Application < Rails::Application
    # i18nファイルを階層管理できるようにします。(後述)
    config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}').to_s]

    # 表示時のタイムゾーンをJSTに変更
    config.time_zone = 'Tokyo'
    # DB保存時のタイムゾーンをJSTに変更
    config.active_record.default_timezone = :local

    # ロケールを日本語に変更
    config.i18n.default_locale = :ja
    
    ...
  end
end
```

## 日本語化対応
`ja.yml`を日本語化します。
[このあたり](https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/ja.yml)から取得してきます。

```sh
$ wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/
```

`application.rb`で`locales`を読み込むようにしたので各モデルは`config/locales/models`フォルダを掘って管理する。

※小規模ではここまでしなくても良いのですが、たいした手間ではないので階層化して管理してると後々楽に管理できる。

各モデルの記述は以下のようになってスマート

```yaml:confilg/locales/models/user/ja.yml
ja:
  activerecord:
    attributes:
      # ユーザー情報
      user:
        account: アカウント
        password: パスワード
```

Viewで使うときは以下のようになる。

```erb
<%= t 'activerecord.attributes.user.account' %>
```

## bootstrapを入れる
管理画面はほぼこれで作る。
ただ、入れるときには`Gem`では入れない。

```erb
  <!-- Bootstrap core CSS -->
  <%= stylesheet_link_tag "/css/bootstrap.min.css" %>
  <%= javascript_include_tag '/js/bootstrap.min.js' %>
```

こんな感じで必要に応じた（管理画面）だけに入れる。
`assets`で管理すると楽だけど、Bootstrapのバージョンアップとかが地味に面倒だったりフロントデザインと競合したりすると面倒なので。

この方法だととても楽に管理できる。

## flashメッセージ表示用ヘルパーを作る
大したものではないけど、flashメッセージは毎回表示するので作ってる。

```rb
  # メッセージの種別によって振り分けて表示します。
  # success => alert-success
  # info => alert-info
  # alert, warn => alert-warning
  # danger, error => alert-danger
  def flash_message
    message = nil
    tag = nil
    {
        success: "alert-success",
        info: "alert-info",
        alert: "alert-warning",
        warn: "alert-warning",
        danger: "alert-danger",
        error: "alert-danger",
    }.each { |key ,value|
      if flash[key]
        message = flash[key]
        tag = value
        break
      end
    }
    "<div class='alert #{tag}' role='alert'>#{message}</div>".html_safe if message
  end
```

使用方法は以下を好きなところに入れる。

```erb
<%= flash_message %>
```

## モデルエラーメッセージ用のヘルパーを作る。
これも同様

```rb
  # エラーメッセージを表示します。
  def error_message_with_model(model)
    render partial: "model/error_model", object: model if model
  end
```

レイアウトは以下

```erb:views/model
<% if error_model.errors.any? %>
    <div id="error_explanation">
      <div class="alert alert-danger">
        <%= error_model.errors.count %>件のエラーがあります。
        <ul>
          <% error_model.errors.full_messages.each do |msg| %>
              <li><%= msg %></li>
          <% end %>
        </ul>
      </div>
    </div>
<% end %>
```

使い方は以下を好きなところに入れる。

```erb
<%= error_message_with_model(@model) %>
```

## turbolinksの調査
よく忘れるので以下のコードを使って、ターボリンクの挙動を調査する。
[今更ながらTurbolinksを初めて仕事で使ってみたので色々調べてみた](http://serihiro.hatenablog.com/entry/2014/08/11/234419)さんのコードを使わせてもらってます。

```js
#$(document).on 'page:before-change' , -> console.log 'page:before-change'
#$(document).on 'page:fetch'         , -> console.log 'page:fetch'
#$(document).on 'page:receive'       , -> console.log 'page:receive'
#$(document).on 'page:change'        , -> console.log 'page:change'
#$(document).on 'page:update'        , -> console.log 'page:update'
#$(document).on 'page:load'          , -> console.log 'page:load'
#$(document).on 'ready page:load'    , -> console.log 'ready and load'
#$(document).ready                     -> console.log '$(document).ready in assets'
#$(window).on 'load'                 , -> console.log '$(window).load in assets'
```

## その他
思い出したら追記します。