the*_*aju 5 ruby ruby-on-rails searchlogic
我的rails应用程序有3个型号.小道,地区和特色.我可以在lib/tasks目录中很好地与这些模型进行交互.我用anemone来抓取并填充数据库.我在模型上调用的示例:
Trail.find_or_initialize_by_title(detail_title)
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试编写一个使用该模型的控制器.
class TrailController < ApplicationController
def index
render :json => Trail.all
end
end
Run Code Online (Sandbox Code Playgroud)
现在,如果我打开rails控制台并尝试app.get('trail/index')获得500返回代码,我在我的内容中看到以下内容development.log
SystemStackError(堆栈级别太深):
app/controllers/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
Run Code Online (Sandbox Code Playgroud)
看来这是由searchlogic gem引起的.我在我的Gemfile中有这个:
gem 'rd_searchlogic', :require => 'searchlogic', :git => 'git://github.com/railsdog/searchlogic.|~
Run Code Online (Sandbox Code Playgroud)
当我注释掉那一行时,运行bundle install并重试app.get工作正常.所以searchlogic以某种方式干扰了Trail.all.为什么Trail.all不能安装searchlogic?
rd_searchlogic gem 是问题的根源。http://kiranb.scripts.mit.edu/blog/?p=247讨论了这个问题。“Searchlogic 创建的任何命名范围都是动态的,并通过 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
| 归档时间: |
|
| 查看次数: |
1290 次 |
| 最近记录: |