Rails在before_action不正确的格式内呈现

问题描述 投票:1回答:1

我正在尝试在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)

什么想法可能是错的?

ruby-on-rails ruby
1个回答
0
投票

我不打赌你可以从控制器渲染部分,考虑分享你想要在两种响应类型之间显示的内容。

你需要:

  • _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来实现

© www.soinside.com 2019 - 2024. All rights reserved.