Это нормально, чтобы отбросить .all, когда есть еще один вызов на модель ActiveRecord? - PullRequest
0 голосов
/ 04 июня 2019

Я корректирую код, работающий над моделью профиля, чтобы добавить возможность активировать / деактивировать профиль.В некоторых местах был код Profile.all, и с новым введением он будет Profile.active.all.Мне кажется, что сейчас можно сбросить .all, но я не уверен, что .all не делает магического мастерства.

Я проверил документы для всех и этоупоминает область по умолчанию.Мне почему-то кажется, что AR всегда должен использовать область видимости по умолчанию, если только я не назову unscoped .

Это определенно не так много мест, поэтому я не смог изменить это позже.Мне просто любопытно.

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Если я правильно понимаю код, большинство методов запросов фактически делегируются :all.Вы можете избежать этого .all, потому что ActiveRecord фактически добавляет это для вас с большинством из них.

https://github.com/rails/rails/blob/b1879124a82b34168412ac699cf6f654e005c4d6/activerecord/lib/active_record/querying.rb

module ActiveRecord
  module Querying
    delegate :find, :take, :take!, :first, :first!, :last, :last!, :exists?, :any?, :many?, to: :all
    delegate :second, :second!, :third, :third!, :fourth, :fourth!, :fifth, :fifth!, :forty_two, :forty_two!, to: :all
    delegate :first_or_create, :first_or_create!, :first_or_initialize, to: :all
    delegate :find_or_create_by, :find_or_create_by!, :find_or_initialize_by, to: :all
    delegate :find_by, :find_by!, to: :all
    delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, to: :all
    delegate :find_each, :find_in_batches, to: :all
    delegate :select, :group, :order, :except, :reorder, :limit, :offset, :joins,
             :where, :rewhere, :preload, :eager_load, :includes, :from, :lock, :readonly,
             :having, :create_with, :uniq, :distinct, :references, :none, :unscope, to: :all
    delegate :count, :average, :minimum, :maximum, :sum, :calculate, to: :all
    delegate :pluck, :ids, to: :all
1 голос
/ 04 июня 2019

Да, его безопасно удалить.

Просто чтобы убедиться, что в консоли запущены два запроса:

Profile.active.all.to_sql
Profile.active.to_sql
...