2012-11-04 7 views
5

私のレールアプリには3つのモデルがあります。トレイル、地域、およびフィーチャー。私はlib/tasksディレクトリのこれらのモデルとうまくやりとりすることができます。私はアネモネを使用してデータベースをクロールして読み込みました。レール:スタックレベルが深すぎるエラー

Trail.find_or_initialize_by_title(detail_title) 

私はモデルを使用するコントローラを作成しようとしています。私はレールのコンソールを開き、app.get('trail/index')をしようとした場合

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

は、今私は500リターンコードを取得し、私は私のdevelopment.log

SystemStackError(スタックレベルが深すぎる)に以下を参照してください。
アプリ/コントローラ/ trail_controller.rb:23: `index '内

私は明らかに無限の再帰を引き起こしています。 23行目はindexメソッドの本体に対応しています。私は私のアプリで他のモデルを試しました:機能と地域と結果は同じです。誰かが私がここで間違っていることを教えてもらえますか、まったく正確に何が無限に再帰しているかを知るために、より多くのトレースを得ることができますか?

私のモデルは非常に単純です:

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をインストールしても動作しませんか?

+0

次の場合はどうなりますか? 'trails = Trail.all;レンダリングjson:トレイル '? –

+0

これらのモデルのいずれかでas_jsonまたはto_jsonを上書きしたと思います。 – apneadiving

+0

私は 'trails = Trail.all;を試しました。レンダリング:json => trails'と同じエラーが発生しました。 – theraju

答えて

1

rd_searchlogic gemが問題の原因でした。 http://kiranb.scripts.mit.edu/blog/?p=247はこの問題について話します。 "Searchlogicが作成する名前付きスコープは、dynamicであり、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

関連する問題