module ActiveRecord::Core::ClassMethods
def find_by(*args) # :nodoc:
def find_by(*args) # :nodoc: return super if scope_attributes? hash = args.first return super unless Hash === hash hash = hash.each_with_object({}) do |(key, value), h| key = key.to_s key = attribute_aliases[key] || key return super if reflect_on_aggregation(key) reflection = _reflect_on_association(key) if !reflection value = value.id if value.respond_to?(:id) elsif reflection.belongs_to? && !reflection.polymorphic? key = reflection.join_foreign_key pkey = reflection.join_primary_key value = value.public_send(pkey) if value.respond_to?(pkey) end if !columns_hash.key?(key) || StatementCache.unsupported_value?(value) return super end h[key] = value end keys = hash.keys statement = cached_find_by_statement(keys) { |params| wheres = keys.index_with { params.bind } where(wheres).limit(1) } begin statement.execute(hash.values, connection).first rescue TypeError raise ActiveRecord::StatementInvalid end end