После установки Bullet gem я начал заниматься парой проблем n + 1.
Ранее я использовал оператор безопасной навигации для проверки текущей подписки учетной записи, принадлежащей current_user:
def current_subscription
@current_subscription ||= current_user&.account&.subscription #n+1 scenario
@current_subscription
end
Я рефакторинг с новым запросом с использованием .try ():
def current_subscription
@current_subscription ||= Subscription.where(account_id: current_user.try(:account_id)).first
@current_subscription
end
Кажется, это работает нормально: мои тесты все еще проходят, и Пуля удовлетворена.
Это хорошая практика или есть лучший подход?
Спасибо.