我正在尝试在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)
什么想法可能是错的?
我不打赌你可以从控制器渲染部分,考虑分享你想要在两种响应类型之间显示的内容。
你需要:
_alert.html.slim
(包含您要显示的内容)alert.html.slim
(仅包含对您的partial的调用,用于html响应)alert.js.rb
(包含对你可以通过jq / js操作的partial的调用,用于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来实现