0

レガシー プロジェクトを Rails 2.3.2 から 2.3.16 にアップグレードしています (最近公開された脆弱性の結果として) が、has_manyいずれかのモデルで関連付けにアクセスしようとすると、ArgumentErrorfrom 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% 確信しているわけではないからです。

4

1 に答える 1

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

これは必要ないはずなので、本当の原因がすぐに見つかることを願っています。あなたの問題についてさらに進展はありますか?

于 2013-11-22T02:31:45.430 に答える