繁体   English   中英

Rails:堆栈级别太深的错误

[英]Rails: Stack level too deep error

我的rails应用程序有3个型号。 小道,地区和特色。 我可以在lib / tasks目录中很好地与这些模型进行交互。 我用anemone来抓取并填充数据库。 我在模型上调用的示例:

Trail.find_or_initialize_by_title(detail_title)

我现在正在尝试编写一个使用该模型的控制器。

class TrailController < ApplicationController
    def index
        render :json => Trail.all
    end
end

现在,如果我打开rails控制台并尝试app.get('trail/index')我得到一个500返回代码,我在我的development.log看到以下内容

SystemStackError(堆栈级别太深):
app / controllers / trail_controller.rb:23:在'index'中

所以我显然会引起一些无限的递归。 第23行对应于索引方法的主体。 我在我的应用程序中尝试过其他模型:功能和区域,结果是一样的。 有人可以告诉我这里我做错了什么,或者我怎么能得到更多的追踪来弄清楚究竟什么是无限递归?

我的模型非常简单:

class Feature < ActiveRecord::Base 
  attr_accessible :name 
  has_and_belongs_to_many :trails 
  validates :name, :presence => true
end 

class Region < ActiveRecord::Base 
  attr_accessible :hash_key, :name 
  has_many :trails 
  validates :hash_key, :name, :presence => true 
end 

class Trail < ActiveRecord::Base 
  # attr_accessible :title, :body 
  has_and_belongs_to_many :features 
  validates :title, :presence => true    
end

看来这是由searchlogic gem引起的。 我在我的Gemfile中有这个:

gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.|~                                                                                                    

当我注释掉那一行时,运行bundle install并重试app.get工作正常。 所以searchlogic以某种方式干扰了Trail.all。 为什么Trail.all不能安装searchlogic?

rd_searchlogic gem是问题的根源。 http://kiranb.scripts.mit.edu/blog/?p=247谈论这个问题。 “Searchlogic创建的任何命名范围都是动态的,并通过method_missing创建。由于Rails 3.1在activerecord周围发生了很大变化,因此Searchlogic在activerecord上调用了一个缺失的方法,然后将其重新路由到searchlogic。”

我决定切换到meta_where,只是为了了解它从Rails 3.1开始不受支持。 我正在运行Rails 3.2.8。 Squeel是替代品,在Rails 3.2.8上运行良好: https//github.com/ernie/squeel

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM