method
find_by
v4.2.7 -
Show latest stable
- Class:
ActiveRecord::Core::ClassMethods
find_by(*args)public
No documentation available.
# File activerecord/lib/active_record/core.rb, line 162
def find_by(*args) # :nodoc:
return super if current_scope || !(Hash === args.first) || reflect_on_all_aggregations.any?
return super if default_scopes.any?
hash = args.first
return super if hash.values.any? { |v|
v.nil? || Array === v || Hash === v
}
# We can't cache Post.find_by(author: david) ...yet
return super unless hash.keys.all? { |k| columns_hash.has_key?(k.to_s) }
key = hash.keys
klass = self
s = find_by_statement_cache[key] || find_by_statement_cache.synchronize {
find_by_statement_cache[key] ||= StatementCache.create(connection) { |params|
wheres = key.each_with_object({}) { |param,o|
o[param] = params.bind
}
klass.where(wheres).limit(1)
}
}
begin
s.execute(hash.values, self, connection).first
rescue TypeError => e
raise ActiveRecord::StatementInvalid.new(e.message, e)
rescue RangeError
nil
end
end