5

私の 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 を妨害しています。searchlogic がインストールされていると Trail.all が機能しないのはなぜですか?

4

1 に答える 1

1

rd_searchlogic gem が問題の原因でした。http://kiranb.scripts.mit.edu/blog/?p=247でこの問題について説明しています。「Searchlogicが作成する名前付きスコープはすべて動的で、method_missingによって作成されます。また、Rails 3.1でactiverecordが大幅に変更されたため、Searchlogicはactiverecordで欠落しているメソッドを呼び出し、それがsearchlogicに再ルーティングされます。」

Rails 3.1 以降ではサポートされていないことを知るためだけに、meta_where に切り替えることにしました。Rails 3.2.8 を実行しています。Squeel はその代替であり、Rails 3.2.8 でうまく動作します: https://github.com/ernie/squeel

于 2012-11-06T06:09:33.773 に答える