我的 Rails 应用程序有 3 个模型。足迹、区域和特征。我可以在我的 lib/tasks 目录中很好地与这些模型进行交互。我使用海葵来抓取和填充数据库。我对模型进行的调用示例:
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:in `index'
所以我显然导致了一些无限递归。第 23 行对应于 index 方法的主体。我在我的应用程序中尝试了其他模型:Feature 和 Region,结果是一样的。有人可以告诉我我在这里做错了什么,或者我如何获得更多跟踪以找出究竟是什么无限递归?
我的模型非常简单:
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 的情况下工作?