我有以下控制器
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
答案 0 :(得分:1)
不要命名范围parent
。 parent
是在类上定义的方法,不应该被覆盖,因为rails使用它来确定模型的table_name(它需要检查它是否继承自另一个ActiveRecord模型,因为它可能涉及到STI)模型)。
table_name
方法。由于您覆盖parent
方法以返回i范围,establish_connection
将调用您的方法,该方法将再次调用establish_connection
,依此类推 - 无限重复,因此堆栈级别太深错误。
重命名你的范围(也许是parents
?),所有这些都应该恢复正常。
答案 1 :(得分:-3)
看起来不错,但是当你更新一些宝石时可能会发生这种情况。您是否还记得最近是否更新了某些gem还是更新了捆绑更新?如果是,您应该找出哪一个,并尝试重新设置以前的版本。
另一个问题可能出在您的类别模型代码中。请提供它以帮助您。
<强>更新强>
我在使用gem rmagick时遇到了这个问题,所以在更新之后它停止了工作,并且显示我的堆栈级别太深了#39;不知何故。所以,为了解决它,我改变了
gem 'rmagick'
到
gem 'rmagick', :require => 'RMagick'