Moja aplikacja szyn ma 3 modele. Szlak, region i funkcja. Jestem w stanie współdziałać z tymi modelami w moim katalogu lib/tasks. Użyłem anemonu do przeszukiwania i zapełniania bazy danych. Przykłady połączeń wykonanych na modelach:Szyny: zbyt duży poziom stosu
Trail.find_or_initialize_by_title(detail_title)
Próbuję teraz napisać kontroler korzystający z modelu.
class TrailController < ApplicationController
def index
render :json => Trail.all
end
end
Teraz, jeśli mogę otworzyć szyn konsolę i spróbuj app.get('trail/index')
dostanę kod 500 powrotną i widzę następujących w moim development.log
SystemStackError (poziom stos zbyt głęboko):
app/controllers/trail_controller.rb: 23: in 'index'
Więc oczywiście powoduję nieskończoną rekursję. Linia 23 odpowiada treści metody indeksu. Próbowałem już innych modeli w mojej aplikacji: funkcja i region, a wynik jest taki sam. Czy ktoś może mi powiedzieć, co robię źle tutaj, lub w jaki sposób mogę uzyskać więcej śledzenia, aby dowiedzieć się, co dokładnie jest recursing w nieskończoność?
Moje modele są bardzo proste:
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
Wydaje się to jakoś jest spowodowane przez searchlogic gem. Mam to w mojej Gemfile:
gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.|~
Po zakomentowaniu tego wiersza uruchom instalację pakietu i spróbuj ponownie app.get działa poprawnie. Więc searchlogic w jakiś sposób zakłóca działanie Trail.all. Dlaczego Trail nie będzie działać z zainstalowanym searchlogic?
Co się stanie, jeśli to zrobisz: 'trails = Trail.all; renderować json: trail'? –
Domyślam się, że nadpisałeś as_json lub to_json w jednym z tych modeli. – apneadiving
Próbowałem 'szlaki = Trail.all; render: json => trails' i dostał ten sam błąd. – theraju