首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >to_sql on arel并不是每次都能工作

to_sql on arel并不是每次都能工作
EN

Stack Overflow用户
提问于 2014-09-16 12:48:42
回答 1查看 1.9K关注 0票数 2

我正在尝试将名为史克鲁奇的gem集成到我的应用程序中,但我一直遇到一些奇怪的问题,即获取以下错误

NoMethodError: to_sql'**中未定义的方法

经过仔细的调试,我发现错误正在.to_sql上产生。

找出为什么我在这个线路上添加了断点

然后我找到了这个

第一次运行的##

Performer.find(1985年)

代码语言:javascript
复制
 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年)

代码语言:javascript
复制
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不能工作

任何人都有线索

更多信息-

  • Rails 3.2.10
EN

回答 1

Stack Overflow用户

发布于 2014-09-22 07:48:04

看来这是宝石的漏洞。您可以看到讨论这里

解决这个问题有两种可能的方法。

  1. 如果您正在使用query_reviewer gem,请尝试禁用它。
  2. 如果上面的步骤不起作用。通过yourself.rails/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb def to_sql(rel.binds= [])修正active_record错误,如果arel.respond_to(:ast) visitor.accept(arel.ast)确实引用(*binds.shift.reverse)# binds变量的bug end arel.respond_to end endDefault参数的根本原因的话。改变它就像 def to_sql(rel.binds= [[]]) #添加了一个空数组 检查这里如何覆盖rails模块方法(简单的方法)。或者,您可以将您的gems部署到本地文件夹并覆盖它们(困难的方法),例如检查回答

FYI:您的帖子中的错误指向database_statements.rb:11,但是我发现来源在第8行有代码,但找不到您的确切版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25869219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档