堆栈级别太深 - Re:has_many到belongs_to Association

时间:2011-08-31 20:36:40

标签: ruby-on-rails ruby-on-rails-3 activerecord

这是我的代码:

#class CategoriesController < ApplicationController
def show
  @category = Category.find(params[:id])
end

#class Category < ActiveRecord::Base
has_one :task_list

#TaskList < ActiveRecord::Base
belongs_to :category

在TaskList模型中使用category_id

我把这个放在我看来:

<%= @category.task_list.id %>

我收到stack level too deep错误。

我迷路了,我发誓我完成了相同的设置100次。

非常感谢任何帮助。感谢。

更新

这是完整的痕迹(减去我修剪的顶部因为它一遍又一遍地重复:

See gist link below

更新2:

好的,我已经从头开始并且改进了我不需要的东西,而且正如它所显示的那样:http://asciicasts.com/episodes/196-nested-model-form-part-1

class Category < ActiveRecord::Base
  has_many :tasks, :dependent => :destroy
end

class Task < ActiveRecord::Base
  belongs_to :category
end

#_form.html.erb
<%= form_for @category do |f| %>
    <%= f.error_messages %>
    <p>
        <%= f.label :name %><br />
        <%= f.text_field :name %>
    </p>

    <p>
        <% f.fields_for :tasks do |builder| %>  
        <p>  
            <%= builder.text_field :name %>  
        </p>  
        <% end %>  

    </p>

    <p><%= f.submit %></p>
<% end %>

#CategoryController 
def new
  @category = Category.new
  3.times { @category.tasks.build }  
end

我仍然得到同样的东西......这是完整的https://gist.github.com/1185772

更新3:

这是Task&amp;的完整版本。类别模型:https://gist.github.com/1185839

4 个答案:

答案 0 :(得分:8)

您检查了模型吗?

如果两者都设置为:destroy,那么你最终会得到一个无限循环并且堆栈级别太深错误。它们应该如下:

has_one :task_list, :dependent => :destroy

belongs_to :category, :dependent => :delete

还有更多信息。关于错误here

答案 1 :(得分:1)

请参阅该问题遗留下来的评论。 Acts_as_tree遇到了我所做的范围问题。而且我最终也从头开始,现在工作正常。

答案 2 :(得分:0)

问题是task是Rails中的保留字。以下是在干净的应用程序控制台中执行时task输出的内容:

irb(main):001:0> task
=> <Rake::Task  => []>

重命名模型,它会起作用。

答案 3 :(得分:0)

您的要点显示任务&lt; ActiveRecord什么时候应该是Task&lt; ActiveRecord的

您是否正确地生成了模型:

rails g model Task category_id:integer title:string