我正在尝试在before_action
内渲染模板,并且它正在以html格式呈现。请求是:js格式。
def check_destroy
p request.format
render partial: 'layouts/alert', locals: {type: 'info', message: 'my message from check destroy', title: 'my title'}
end
日志输出:
:js
Rendered layouts/_alert.html.slim (5.3ms)
如果我在渲染之前设置respond_to :js
一切正常。
Rendered layouts/_alert.js.erb (0.7ms)
任何想法可能出错?
答案 0 :(得分:0)
我不打赌你可以从控制器渲染部分,考虑分享你想要在两种响应类型之间显示的内容。
你需要:
_alert.html.slim
(包含您要显示的内容)alert.html.slim
(仅包含对您的partial的调用,用于html响应)alert.js.rb
(包含对您可以通过jq / js进行操作的部分调用,用于js响应)在js.erb:
$("your_selector").html("<%= j(render partial: "/layouts/alert", locals: {…}) %>");
(用j(…)
包裹你的渲染,escape_javascript
的缩写,需要
在html.slim中:
<%= render partial: "/layouts/alert", locals: {…} %>
您可以将控制器设置如下:
respond_to do |format|
format.html { render template: 'layouts/alert' } # will pick alert.html.slim template
format.js { render template: 'layouts/alert' } # will pick alert.js.erb template
end
基于模板也应该使用以下设置:
render formats: [:html, :js]
这个模式已经过时,但是你可以通过控制器使用rails来实现这个模式