>访问用户工作申请索引
>点击一个按钮到管理职位发布页面
>点击一个选项卡(使用bettertabs宝石)
>点击浏览器的返回按钮
以前的步骤将显示:
(function() { $(".job_applications").html("<li class=\"job_posting_application\">\n ... ... ... ... ); }).call(this);
在某些命中或错误的情况下,您不需要在返回上一页之前单击选项卡,但仍会呈现原始的JavaScript.在一天结束的时候,似乎最后一个渲染的模板被缓存,这在浏览器的一部分是正常和预期的,但是导致我认为是一个更大的问题.
Rails指南在Layouts and Rendering的部分中明确指出了模板的MIME类型:
By default,Rails will serve the results of a rendering operation with the MIME content-type of text/html (or application/json if you use the :json option,or application/xml for the :xml option.).
根据Rails默认值,我们的控制器的索引操作可以渲染我们的index.html.slim模板.但是,当拖尾服务器日志时,当对该页面进行非远程调用(例如,直接导航到浏览器中的页面)时,我们注意到它实际上呈现index.js.coffee.以下是我们的控制器操作,并注意到我们没有显式地响应html或js格式,因为我们可能应该考虑此页面中的重叠功能:
def index @company_id,@division_id,@job_posting_id = params[:company_id],params[:division_id],params[:job_posting_id] # API requests are made here to instantiate @job_posting,et al.,# but are not shown for brevity authorize! :manage,@job_posting @survey = @job_posting.survey @job_applications = @job_posting.job_applications(sort_column,sort_direction) end
然而,给定这个设置,index.html.slim应该基于Rails默认值渲染.当添加一个respond_to块时,似乎缓存仍然有效,并且控制器可以更少地关注respond_to块的存在:
def index ... ... respond_to do |format| format.html format.js end end
即使明确地,虽然臭,告诉每种格式呈现不同的模板,似乎js.coffee模板优先于html.slim模板:
def index ... ... respond_to do |format| format.html { render template: "users/job_posting_applications/index" } format.js { render template: "users/job_posting_applications/ajax" } end end
在上述情况下,直接导航到浏览器中的页面(换句话说,不进行远程Ajax调用),服务器日志将呈现ajax.js.coffee,即使除非另有说明,Rails的默认值为html.
所有这一切都说,这里有一些其他的发现:
Started GET "/users/companies/1/divisions/18/job_postings/349421/applications" for 127.0.0.1 at 2012-10-03 19:55:26 -0400 Processing by Users::JobPostingApplicationsController#index as JSON
(您可以参考上述in this pastie所示的整个请求)
为什么它的处理是因为JSON超出了我的范围,考虑到我们不会在此请求中提供任何JSON,并且在路由中没有规定以下路由:json for this route.
此外,当调用此操作中的request.format的值时,它返回application / json.
另一个呈现的场景是在另一个控制器(users / company_admin_metrics#index)中,它只包含一个index.html.slim模板.当导航到此页面时,服务器日志显示它在布局/用户中呈现用户/ company_admin_metrics / index.html.slim.当我创建一个空白的js.coffee模板:
$touch app/views/users/company_admin_metrics/index.js.coffee
并直接导航到该索引页面,服务器日志显示它呈现用户/ company_admin_metrics / index.js.coffee,这进一步暴露了有关模板渲染优先级的潜在问题.
有没有人遇到类似的问题,可能会为此提供一个潜在的解决方案?
我们的堆栈
以下是这个特殊问题的基本参与者的一小部分列表:
> Rails 3.2.6
咖啡轨3.2.1
> Bettertabs 1.2.6
这个请求取决于我们的职位发布API的请求,通过解析JSON并返回一个Ruby对象的客户端gem,但是这些应用程序不会与这个特定的应用程序相结合,从而会导致此应用程序的内容类型为application / json用于上述请求.