Nwht0xn1

RailsのViewで render layout: ... を使うときにi18nのキーを上手く扱うCreated on 2016-04-26 by r7kamura

例えばこういう画面。設定画面では、左側のメニュー項目を内包する共通のレイアウトを使いまわしたい。

2016-04-26 7 57 30

問題

こうやると、ja.application.user_settings 以下の定義がどんどん増えていってしまう。

/ app/views/profiles/show.html.slim
= render layout: "user_settings" do
  .panel
    .panel-heading
      = t(".profile") # ja.application.user_settings.profile が参照されてしまう
    .panel-body
      ...

対策

レイアウトを使うとき、ActionView::Helpers::CaptureHelper#capture を使って一度外側のコンテキストで評価したあとで渡してやることにすると、辞書の定義をactionごとに上手く分散させられる。

/ app/views/profiles/show.html.slim
- content = capture do
  .panel
    .panel-heading
      = t(".profile") # ja.profiles.show.profile が参照される
    .panel-body
      ...
= render layout: "user_settings" do
  = content