undefined method `reverse' for nil:NilClass
To reproduce
Create a rails app with this gist : https://gist.github.com/ajoulie/df84134d49a9b8c7785a
Create an author and run scope on console
a = Author.create(name: 'the_name')
a.post.test
Stack shows
NoMethodError: undefined method `reverse' for nil:NilClass
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/connection_adapters/abstract/database_statements.rb:28:in `block in to_sql'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/bind_visitor.rb:31:in `call'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/bind_visitor.rb:31:in `visit_Arel_Nodes_BindParam'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/visitor.rb:28:in `visit'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/to_sql.rb:524:in `visit_Arel_Nodes_Equality'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/visitor.rb:28:in `visit'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/to_sql.rb:505:in `block in visit_Arel_Nodes_And'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/to_sql.rb:505:in `map'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/to_sql.rb:505:in `visit_Arel_Nodes_And'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/visitor.rb:28:in `visit'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/visitor.rb:8:in `accept'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/visitors/bind_visitor.rb:16:in `accept'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/arel-4.0.2/lib/arel/nodes/node.rb:45:in `to_sql'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord_any_of-1.2/lib/activerecord_any_of/alternative_builder.rb:83:in `with_statement_cache'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord_any_of-1.2/lib/activerecord_any_of/alternative_builder.rb:29:in `build'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord_any_of-1.2/lib/activerecord_any_of/alternative_builder.rb:12:in `build'
... 2 levels...
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/base.rb:28:in `call'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/base.rb:28:in `call'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/scoping/named.rb:163:in `block (2 levels) in scope'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/relation.rb:270:in `scoping'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/scoping/named.rb:163:in `block in scope'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/relation/delegation.rb:36:in `block in test'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/associations/collection_proxy.rb:845:in `block in scoping'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/relation.rb:270:in `scoping'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/associations/collection_proxy.rb:845:in `scoping'
from /Users/antoinejoulie/.rbenv/versions/2.0.0-p353/lib/ruby/gems/2.0.0/gems/activerecord-4.0.3/lib/active_record/relation/delegation.rb:36:in `test'
A (quick?) fix Use
ActiveRecord::ConnectionAdapters::AbstractAdapter#without_prepared_statement?
to decide wether or not use prepared_statements, instead of
ActiveRecord::ConnectionAdapters::AbstractAdapter#supports_statement_cache?
on line 24 of lib/activerecord_any_of/alternative_builder.rb
Problem: this methods is protected.
Hello @ajoulie,
Thanks for pointing this out.
I've already had problems with prepared statements,
#without_prepared_statement won't help because statements are already
prepared when reaching #any_of.
Actually, if it's related to prepared statements and bind values, it
may already be solved in branch fix_prepared_statement. Could you try
it by any chance, to see if it's the same problem ?
Hi, I tried on the commit 8c0d51192c2c. Exact same problem, exact same trace.