Sine: Nivelul stivă prea adânc de eroare

voturi
5

Șine mea aplicație are 3 modele. Trail, Regiune și caracteristici. Sunt în măsură să interacționeze cu aceste modele fine în lib directorul meu / sarcini. Am folosit anemone să se târască și a popula baza de date. Exemple de apeluri I efectuate pe modele:

Trail.find_or_initialize_by_title(detail_title)

Acum am încercat să scrie un controler care utilizează modelul.

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

Acum , dacă am deschide consola șine și să încercați app.get('trail/index')să obțineți un cod de 500 de întoarcere și am văzut următoarele în meudevelopment.log

SystemStackError (nivel de stiva prea adânc):
app / controlere / trail_controller.rb: 23: în `index“

Deci, eu, evident, provocând unele recursie infinit. Linia 23 corespunde cu corpul metodei indicelui. Am încercat alte modele în aplicația mea: Caracteristică și regiunea și rezultatul este același. Poate cineva să-mi spui ce fac greșit aici, sau cum pot obține mai multe urmărire pentru a da seama exact ce este recursiune infinit?

Modelele mele sunt foarte simple:

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

Se pare că acest lucru este într-un fel a fost cauzată de bijuterie searchlogic. Am acest lucru în Gemfile meu:

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

Când am comentați această linie, executați pachetul de instalare și încercați din nou app.get lucrurile funcționează bine. Deci, searchlogic este cumva interferează cu Trail.all. De ce nu va lucra cu Trail.all searchlogic instalat?

Întrebat 04/11/2012 la 18:06
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Bijuterie rd_searchlogic a fost sursa problemei. http://kiranb.scripts.mit.edu/blog/?p=247 vorbește despre problema. „Orice domeniu de aplicare numit Searchlogic creează este dinamic și creat prin method_missing. Si pentru ca Rails 3.1 schimbat în jurul activerecord atât de mult, Searchlogic solicită o metodă lipsă pe activerecord, care apoi devine redirecționată la searchlogic.“

Am decis să treacă la meta_where, doar pentru a afla că nu este acceptat de la Rails 3.1 începând. Fug Rails 3.2.8. Squeel este înlocuirea, și funcționează foarte bine pe șine 3.2.8: https://github.com/ernie/squeel

Publicat 06/11/2012 la 07:09
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more