1

离开 Rails 大约一年了,并试图通过尝试原型来记住所有内容。我继承了脚手架模板以提供一个显示视图,该视图允许向下钻取到相关的 has_many 模型。有一些深度嵌套的模型,但我从不深入 1 层并使用显示视图向下钻取。

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

默认情况下,主要相关模型索引视图呈现为来自显示视图的模板,通常来自相关模型的 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 上的渲染散列的情况下加载,但保持一致。

在摸索了几个小时试图找到任何其他差异之后。我制作了participants.html.erb 并将.js 行更改为

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

这有效,没有错误,js 和 html 都有效(participants.html.erb 呈现部分)!

既然我让它工作了,我想除了为什么模板与部分的不同行为之外我没有其他问题?或者,我还有什么需要学习的吗?

史蒂夫

4

0 回答 0