ンンンパ

ふとしです

移転しました

Squeel 導入したら ActiveRecord#select で死んだ

User.select(:first_name, :last_name)

みたいなことをしておった状態に squeel をいれたら

ArgumentError (wrong number of arguments (2 for 0..1))

と言われました。

コードをみたら引数一個しか取らない感じになってる。他はだいたい*argsなのに、なんでselectだけこんな仕打ちを……。

        def select(value = Proc.new)
          if block_given? && Proc === value
            if value.arity > 0 || (Squeel.sane_arity? && value.arity < 0)
              to_a.select {|*block_args| value.call(*block_args)}
            else
              relation = clone
              relation.select_values += Array.wrap(DSL.eval &value)
              relation
            end
          else
            super
          end
        end

どうしても squeel 使いたかったので下にあった where に習って *rest を加えましたが、ひどすぎる仕打ちなので俺がなにか間違っているのかもしれない。

require 'active_record'

module Squeel
  module Adapters
    module ActiveRecord
      module RelationExtensions
        def select(value = Proc.new, *rest)
          if block_given? && Proc === value
            if value.arity > 0 || (Squeel.sane_arity? && value.arity < 0)
              to_a.select {|*block_args| value.call(*block_args)}
            else
              relation = clone
              relation.select_values += Array.wrap(DSL.eval &value)
              relation
            end
          else
            super
          end
        end
      end
    end
  end
end