对于嵌套表单,show#controller中的“堆栈级别太深”错误

时间:2012-12-11 16:19:08

标签: ruby-on-rails-3 activerecord

我得到了

  

Admin :: ChecklistsController中的SystemStackError#show

     堆栈级别太深

控制器行动:

# GET /admin/checklists/1
# GET /admin/checklists/1.json
def show
  @admin_checklist = Admin::Checklist.find(params[:id])

  respond_to do |format|
    format.html #show.html.erb
    format.json { render json: @admin_checklist }
  end
end

模特

class Admin::Checklist < ActiveRecord::Base
  attr_accessible :description, :name, :usable, :categories_attributes
  has_many :categories, :dependent => :destroy
  validates_presence_of :name,:description

  accepts_nested_attributes_for :categories, :allow_destroy => true

end

class Admin::Category < ActiveRecord::Base
  attr_accessible :export_head, :export_position, :export_text, :frontend_head, :frontend_position, :frontend_text
  belongs_to :checklist
  validates_presence_of :frontend_head, :frontend_text

end

我已经使用attributes_accessible玩了一下。如果我将:categories_attributes替换为:categories

然后我松开无限循环错误,但正如预期的那样,我不能再分配任何类别属性

任何人都知道如何解决这两个错误。

修改

  

在2012-12-12开始获取192.168.4.191的GET“/ admin / checklists / 4”   10:12:41 +0100由Admin :: ChecklistsController处理#show as HTML   参数:{“id”=&gt;“4”} Admin :: Checklist Load(0.2ms)SELECT   “admin_checklists”。* FROM“admin_checkli
  sts“WHERE”admin_checklists“。”id“=?LIMIT 1 [[”id“,”4“]] CACHE   (0.0ms)SELECT“admin_checklists”。* FROM“admin_checklists”WHERE   “ADMI
  n_checklists“。”id“=?LIMIT 1 [[”id“,”4“]]已完成500内部   服务器错误240毫秒

     

SystemStackError(堆栈级别太深):actionpack(3.2.9)   LIB / action_dispatch /中间件/ reloader.rb:70

     

渲染   /var/lib/gems/1.9.1/gems/actionpack-3.2.9/lib/action_dispatch/middlew   是/ templates / rescues / _trace.erb(1.5ms)已渲染   /var/lib/gems/1.9.1/gems/actionpack-3.2.9/lib/action_dispatch/middlew   是/ templates / rescues / _request_and_response.erb(1.3ms)呈现   /var/lib/gems/1.9.1/gems/actionpack-3.2.9/lib/action_dispatch/middlew   在救援/布局(10.7ms)内是/ templates / rescues / diagnostics.erb

对于每个页面请求,我得到这个SQL-Staement大约100次。这似乎是活动记录中的一些错误或者是我对嵌套模型的活动记录的错误使用.....

编辑2:

  

IRB(主):001:0&GT; Admin :: Checklist.find('4')Admin :: Checklist Load   (0.2ms)SELECT“admin_checklists”。* FROM“admin_checkli
  sts“WHERE”admin_checklists“。”id“=?LIMIT 1 [[”id“,”4“]]   =&GT; #   BrummliBrummliBrummliBrummliBrummliBrummliBr ...“,可用:false,   created_at:“20 12-12-11 13:43:23”,   updated_at:“2012-12-11 13:43:23”&gt;

1 个答案:

答案 0 :(得分:1)

有趣的事实它现在有效,我不太确定是什么解决了它,因为我没有改变任何东西。我刚从休息时间回来。在控制台上找到了。再次在模板中检查它,我得到一个属于错误循环的不同错误消息,因为我已经再次删除它,我通过再次粘贴已删除的部分来修复。

<p id="notice"><%= notice %></p>

<p>
  <b>Name:</b>
  <%= @admin_checklist.name %>
</p>

<p>
  <b>Description:</b>
  <%= @admin_checklist.description %>
</p>

<p>
  <b>Usable:</b>
  <%= @admin_checklist.usable %>
</p>

<p>
    <ul>
        <% @admin_checklist.categories.each do |category|%>
            <li>
                <h3><%= category.frontend_head %></h3>
                <p><%= category.frontend_text %></p>
            </li>
        <% end %>
    </ul>
</p>


<%= link_to 'Edit', edit_admin_checklist_path(@admin_checklist) %> |
<%= link_to 'Back', admin_checklists_path %>

对不起,我无法回答为什么会这样。