我正在尝试将名为史克鲁奇的gem集成到我的应用程序中,但我一直遇到一些奇怪的问题,即获取以下错误
NoMethodError: to_sql'**中未定义的方法
经过仔细的调试,我发现错误正在.to_sql上产生。
找出为什么我在这个线路上添加了断点
然后我找到了这个
第一次运行的##
Performer.find(1985年)
From: /Users/Ratatouille/.rvm/gems/ruby-1.9.3-p547@minerva/gems/activerecord-3.2.10/lib/active_record/relation.rb @ line 171 ActiveRecord::Relation#exec_queries:
166:
167: default_scoped = with_default_scope
168:
169: if default_scoped.equal?(self)
170: @records = if @readonly_value.nil? && !@klass.locking_enabled?
=> 171: binding.pry
172: eager_loading? ? find_with_associations : @klass.find_by_sql(arel, @bind_values)
173: else
174: IdentityMap.without do
175: eager_loading? ? find_with_associations : @klass.find_by_sql(arel, @bind_values)
176: end
[1] pry(#<ActiveRecord::Relation>)> arel.to_sql
=> "SELECT `performers`.* FROM `performers` WHERE `performers`.`id` = ? LIMIT 1"##第二次运行同一记录
Performer.find(1985年)
From: /Users/ratatouille/.rvm/gems/ruby-1.9.3-p547@minerva/gems/activerecord-3.2.10/lib/active_record/relation.rb @ line 171 ActiveRecord::Relation#exec_queries:
166:
167: default_scoped = with_default_scope
168:
169: if default_scoped.equal?(self)
170: @records = if @readonly_value.nil? && !@klass.locking_enabled?
=> 171: binding.pry
172: eager_loading? ? find_with_associations : @klass.find_by_sql(arel, @bind_values)
173: else
174: IdentityMap.without do
175: eager_loading? ? find_with_associations : @klass.find_by_sql(arel, @bind_values)
176: end
[1] pry(#<ActiveRecord::Relation>)> arel.to_sql
NoMethodError: undefined method `reverse' for nil:NilClass
from /Users/ratatouille/.rvm/gems/ruby-1.9.3-p547@minerva/gems/activerecord-3.2.10/lib/active_record/connection_adapters/abstract/database_statements.rb:11:in `block in to_sql'我要说的是为什么第二次arel.to_sql不能工作
任何人都有线索
更多信息-
发布于 2014-09-22 07:48:04
看来这是宝石的漏洞。您可以看到讨论这里。
解决这个问题有两种可能的方法。
query_reviewer gem,请尝试禁用它。binds变量的bug end arel.respond_to end endDefault参数的根本原因的话。改变它就像
def to_sql(rel.binds= [[]]) #添加了一个空数组
检查这里如何覆盖rails模块方法(简单的方法)。或者,您可以将您的gems部署到本地文件夹并覆盖它们(困难的方法),例如检查回答。FYI:您的帖子中的错误指向database_statements.rb:11,但是我发现来源在第8行有代码,但找不到您的确切版本。
https://stackoverflow.com/questions/25869219
复制相似问题