堆栈级别对于控制器而言太深

时间:2014-10-23 13:49:27

标签: ruby-on-rails routes

我有以下控制器

class ShoppingController < ApplicationController
    def index
        @categories = Category.all
    end

end

路由定义为

Rails.application.routes.draw do
    resources :shopping, :only => [:index]
end

转到localhost:3000 / shopping给出

SystemStackError at /shopping
stack level too deep

无法弄清楚原因?

==========================

修改

在评论中添加了类别模型。

class Category < ActiveRecord::Base
    IMAGE_SIZES = {:default => [320, 200] }
    has_many    :products

    mount_uploader :image, ImageUploader

    scope :child, -> { where("parent_id <> 0") }
    scope :parent, -> { where(parent_id: 0) }
    scope :is_active, -> { where(is_active: true) }
end

2 个答案:

答案 0 :(得分:1)

不要命名范围parentparent是在类上定义的方法,不应该被覆盖,因为rails使用它来确定模型的table_name(它需要检查它是否继承自另一个ActiveRecord模型,因为它可能涉及到STI)模型)。

当model建立与数据库的连接时,执行

table_name方法。由于您覆盖parent方法以返回i范围,establish_connection将调用您的方法,该方法将再次调用establish_connection,依此类推 - 无限重复,因此堆栈级别太深错误。

重命名你的范围(也许是parents?),所有这些都应该恢复正常。

答案 1 :(得分:-3)

看起来不错,但是当你更新一些宝石时可能会发生这种情况。您是否还记得最近是否更新了某些gem还是更新了捆绑更新?如果是,您应该找出哪一个,并尝试重新设置以前的版本。

另一个问题可能出在您的类别模型代码中。请提供它以帮助您。

<强>更新

我在使用gem rmagick时遇到了这个问题,所以在更新之后它停止了工作,并且显示我的堆栈级别太深了#39;不知何故。所以,为了解决它,我改变了

gem 'rmagick'

gem 'rmagick', :require => 'RMagick'