Ruby on rails Rails呈现不正确的格式

Ruby on rails Rails呈现不正确的格式,ruby-on-rails,ruby,Ruby On Rails,Ruby,我试图用format.js呈现模板,但得到的却是html格式的呈现。如果我使用respond to进行渲染,一切正常,我得到了js格式的渲染。渲染字符串如下所示: def render_alert(message, opts = {}) locals = opts.slice(:title, :type) locals[:type] ||= 'info' locals.merge!(message: message) render_params = { partial

我试图用format.js呈现模板,但得到的却是html格式的呈现。如果我使用
respond to
进行渲染,一切正常,我得到了js格式的渲染。渲染字符串如下所示:

def render_alert(message, opts = {})
  locals = opts.slice(:title, :type)
  locals[:type] ||= 'info'
  locals.merge!(message: message)
  render_params = {
      partial: 'layouts/alert',
      locals: locals

  }
  render render_params
end
request.format.to_sym显示:js 如果将最后一个字符串更改为

respond_to do |format|
  format.js do
    render render_params
  end
  format.html do
    render render_params
  end
end
你知道什么是错的吗?请求格式正确:

p 'render_params', render_params, request.format.to_sym
render render_params

更新: 如果此函数是从控制器调用的,则一切正常,但如果是从rescue块调用,则呈现html,在BEFOR_操作中:

rescue_from CanCan::AccessDenied do |exception|
  if request.xhr?
    render_alert(exception.message, type: 'error')
  else
    url = request.referrer
    ref_uri = URI.parse(url) rescue nil
    url = root_url if url.blank? || ref_uri&.host != request.domain
    redirect_to url, :alert => exception.message
  end
end

请尝试使用pass格式来呈现方法,如下所示:

locals = opts.slice(:title, :type)
locals[:type] ||= 'info'
locals.merge!(message: message)
render_params = {
    partial: 'layouts/alert',
    locals: locals
}

render render_params, format: request.format.to_sym
我在这里尝试,效果很好:D

我的测试代码:

控制器

  def teste
    render_params = {partial: 'layouts/alert', locals: {type: 'error', message: 'You are not authorized to access this page.'}}
    render render_params, format: request.format.to_sym
  end
查看

layout/_alert.js.erb

alert('<%= message %>');
<h1><%= message %></h1>
警报(“”);
layout/_alert.js.erb

alert('<%= message %>');
<h1><%= message %></h1>

结果JS:

结果HTML:


此代码应同时呈现html和js。我有两个模板:而且我刚刚尝试指定格式,但没有任何更改-html仍在渲染中。对我来说,html不起作用,仍有
渲染布局/\u alert.html.slim