Если вас достаточно волнует производительность запросов, вам следует избегать ActiveRecord::Relation
count
, one?
, none?
, many?
, any?
и т. Д., Которые порождают запрос SQL select count(*) ...
.
Итак, вы можете использовать SQL limit
, например:
def self.single!
# Only one fast DB query
result = limit(2).to_a
# Array#many? not ActiveRecord::Calculations one
raise TooManySomthError if result.many?
# Array#first not ActiveRecord::FinderMethods one
result.first
end
Также, когда вы ожидаете получить только одну запись, вы должны использовать Relation take
вместо first
. Последний предназначен для действительно первой записи и может выдавать бесполезный SQL ORDER BY
.