ajax渲染模板与部分堆栈级别错误

时间:2012-11-21 12:15:11

标签: ruby-on-rails

离铁路大约一年,试图通过试验原型来记住一切。我继承了脚手架模板以提供一个Show视图,允许向下钻取到相关的has_many模型。有一些深度嵌套的模型,但我从来没有超过1深,并使用show view向下钻取。

fieldset
    show fields from models
    actions on model
related action menubar (links to load related records with js)
fieldset
    related index view

默认情况下,主要相关模型索引视图从show视图呈现为模板,通常来自相关模型的index.html.erb。使用路由,大多数相关的索引视图也可以在其自己的页面上呈现。我使用这个方案做了大约8个模型,但是我尝试的最后一个模型给了我一个ActionView::Template::Error (stack level too deep):错误,尝试加载.js模板数百次,并且从不加载.js文件中要求的模板。

Started GET "/events/2/participants" for 127.0.0.1 at 2012-11-21 05:39:56 -0600
Processing by EventsController#participants as JS
  Parameters: {"id"=>"2"}
  Event Load (0.1ms)  SELECT "events".* FROM "events" WHERE "events"."id" = ? LIMIT 1  [["id", "2"]]
  Rendered events/participants.js.erb (0.2ms)
  Rendered events/participants.js.erb (1.9ms)
  ...  
  Rendered events/participants.js.erb (486.2ms)
  Rendered events/participants.js.erb (487.6ms)
Completed 500 Internal Server Error in 496ms

ActionView::Template::Error (stack level too deep):
  activesupport (3.2.8) lib/active_support/notifications/instrumenter.rb:23

工作控制器操作和.js行:

def stages
  @commitment = Commitment.find(params[:id])
  @stages = @commitment.stages.page(params[:page]).per(10)
  respond_to do |format|
    format.js 
    format.html {render :template => "stages/index"}
  end
end

<stages.js.erb>
$("#related").html("<%= escape_javascript(render(:template => 'stages/index'))%>");

请注意.js文件从阶段视图中呈现模板。

控制器的相同内容给我一个问题:

def participants
  @event = Event.find(params[:id])
  @participants = @event.participants
  respond_to do |format|
    format.js 
    format.html {render :template => "events/participants"}
  end
end

<participants.js.erb>
$("#related").html("<%= escape_javascript(render(:template => 'events/participants'))%>");

唯一的区别是索引位于“事件”视图中(没有参与者视图/控制器)。

将在format.html上加载默认模板而不使用渲染哈希值,但保持一致。

抓了几个小时试图找到其他任何差异。我将participant.html.erb改为部分并将.js行改为

$(“#related”)。html(“&lt;%= escape_javascript(render(:partial =&gt;'events / participant'))%&gt;”);

这有效,没有错误,js和html都工作(participant.html.erb渲染部分)!

自从我开始工作以来,我想我没有其他问题,除了为什么模板与部分的不同行为?或者,还有其他我需要学习的东西吗?

史蒂夫

0 个答案:

没有答案