我的Rails應用程序有3個模型。路徑,地區和特徵。我能夠在我的lib/tasks目錄中很好地與這些模型進行交互。我用anemone爬行並填充數據庫。我在模型上撥打的電話示例如下:Rails:堆棧級別太深錯誤
Trail.find_or_initialize_by_title(detail_title)
我正在嘗試編寫使用該模型的控制器。
class TrailController < ApplicationController
def index
render :json => Trail.all
end
end
現在,如果我打開軌道控制檯,並嘗試app.get('trail/index')
我得到了500返回碼,我看到在我development.log
SystemStackError(堆棧級別太深)以下:
應用程序/控制器/ 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寶石造成的。我有這個在我的Gemfile:
gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.|~
當我註釋掉該行,運行捆綁安裝,然後重試app.get事情做工精細。所以searchlogic會以某種方式干擾Trail.all。爲什麼Trail.all不能使用searchlogic安裝?
如果你這樣做會發生什麼:'trails = Trail.all;渲染JSON:Trails'? –
我想你在這些模型之一覆蓋了as_json或to_json。 – apneadiving
我試過'trails = Trail.all; render:json => trails'並得到相同的錯誤。 – theraju