Ruby on rails Rails呈现不正确的格式
我试图用format.js呈现模板,但得到的却是html格式的呈现。如果我使用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
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