ez_whereのrails 2.3.5対応

railsセキュリティホールが2.3.4で塞がれたというので、とりあえずrailsを最新の2.3.5アップグレードしてみた。

しかし、ActiveRecord::Associations::AssociationProxy#sanitize_sqlの仕様が2.3.3で変更された為、それをサポートしていないez_whereが問題を起こしエラーになる。

ArgumentError: wrong number of arguments (2 for 1)
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `sanitize_sql'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `send'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:173:in `sanitize_sql'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:41:in `find'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:400:in `find_target'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:354:in `load_target'
        from /root/rails-dev/xx/vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:139:in `inspect'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/wirble-0.1.3/lib/wirble.rb:432:in `output_value'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:151:in `eval_input'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:263:in `signal_status'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:147:in `eval_input'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:146:in `eval_input'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:70:in `start'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:69:in `catch'
        from /usr/local/ruby-1.8.7-p72/lib/ruby/1.8/irb.rb:69:in `start'
        from /usr/local/ruby/bin/irb:13


そこで同じ問題を抱えていたar-extentionsの対処法をそのままマネしてez_whereを2.3.5対応にしてみた。

--- lib/ez/where.rb.back
+++ lib/ez/where.rb
@@ -1,9 +1,9 @@
 class ActiveRecord::Base
   class << self
     alias :original_sanitize_sql :sanitize_sql
-    def sanitize_sql(condition)
+    def sanitize_sql(condition, table_name = quoted_table_name)
       condition = condition.to_sql if EZ::Where::Condition === condition
-      original_sanitize_sql condition
+      original_sanitize_sql condition, table_name
     end
   end
 end


とりあえず動いた!!

  • 参考URL

http://github.com/zdennis/ar-extensions/commit/870bd3588a86e1f8ae36ab0e497f407ac2afa4c5

てかパッチってどこに送れば良いんだろ??