Rails在before_action错误格式内呈现

时间:2018-03-05 23:40:10

标签: ruby-on-rails ruby

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

任何想法可能出错?

1 个答案:

答案 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来实现这个模式