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 %>
控制器:
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 %>