Rails 渲染模板搞乱了 I18n 范围

Rails render template messes up I18n scope

控制器:

class ProfilesController < ApplicationController
  def show
  end
end

当控制器响应 show action 为 JS 时,show.js.erb 包含以下内容:

$('#main-content').html('<%= j( render( template: "profiles/show.html.erb" ) ) %>');

问题是 I18n.t 的范围在尝试获取密钥时变得混乱: ActionView::Template::Error (translation missing: en.profiles.show.html.erb.followers).

如果我没有指定 .html.erb 部分,它会尝试渲染 show.js.erb ,这会发生无限循环,所以我必须提供 html 格式。

我能做什么?

将profiles/show.html.erb的主要部分提取为部分:

profiles/_show.html.erb

然后渲染为:

$('#main-content').html('<%= j raw render "profiles/show" %>') 

您也可以用同样的方式渲染 profiles/show.html.erb

<%= render 'show' %> <%# renders the partial %>