method
find_by
v7.0.0 -
Show latest stable
- Class:
ActiveRecord::Core::ClassMethods
find_by(*args)public
No documentation available.
# File activerecord/lib/active_record/core.rb, line 287
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