我正在将遗留项目从Rails 2.3.2升级到2.3.16(由于最近公布的漏洞),但当我尝试访问任何模型上的has_many
关联时,我从ArgumentError
获得sanitize_sql
。
class User
has_many :games, :dependent => destroy
end
class Game
belongs_to :user
end
当我尝试调用Game.last.user
时,它返回正确的User
对象,但是调用User.last.games
我得到以下错误堆栈:
ArgumentError: wrong number of arguments (2 for 1)
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_proxy.rb:174:in `sanitize_sql'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_proxy.rb:174:in `send'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_proxy.rb:174:in `sanitize_sql'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_collection.rb:41:in `find'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_collection.rb:423:in `find_target'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_collection.rb:365:in `load_target'
from /home/username/application/shared/bundle/ruby/1.8/gems/activerecord-2.3.16/lib/active_record/associations/association_proxy.rb:140:in `inspect'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:310:in `output_value'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:159:in `eval_input'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:271:in `signal_status'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:155:in `eval_input'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:154:in `eval_input'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:71:in `start'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:70:in `catch'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/lib/ruby/1.8/irb.rb:70:in `start'
from /home/username/.rvm/rubies/ruby-1.8.7-p371/bin/irb:17
我在Ruby 1.8.7上运行Rails 2.3.16;如果我遗漏了任何可能有助于诊断问题的其他细节,请告诉我。
修改
我似乎暂时通过编辑activerecord-2.3.16/lib/active_record/associations/association_proxy.rb
文件中的错误行来解决此问题,如下所示:
# Forwards the call to the reflection class.
def sanitize_sql(sql, table_name = @reflection.klass.quoted_table_name)
@reflection.klass.send(:sanitize_sql, sql) #, table_name)
end
显然,我会更喜欢更长远的解决方案,因为我不能100%确定这不会产生额外的连锁问题。
答案 0 :(得分:0)
我有同样的问题,但找不到导致它的原因。
我也得到了编辑这一行的结论。我做了一个猴子补丁初始化器:
module ActiveRecord
module Associations
class AssociationProxy #:nodoc:
def sanitize_sql(sql, table_name = @reflection.klass.quoted_table_name)
@reflection.klass.send(:sanitize_sql, sql)#, table_name)
end
end
end
end
我希望我能尽快找到真正的原因,因为这不应该是必要的。你的问题还有进展吗?