Remove some N+1s relating to address (found with bullet gem)

This commit is contained in:
Matt-Yorkley
2020-03-19 23:36:16 +01:00
parent b63c47cca2
commit 3de887e1d8
4 changed files with 23 additions and 5 deletions

View File

@@ -8,7 +8,7 @@ class ProducersController < BaseController
.activated
.visible
.is_primary_producer
.includes(address: :state)
.includes(address: [:state, :country])
.includes(:properties)
.includes(supplied_products: :properties)
.all

View File

@@ -8,7 +8,7 @@ class ShopsController < BaseController
.activated
.visible
.is_distributor
.includes(address: :state)
.includes(address: [:state, :country])
.includes(:properties)
.includes(supplied_products: :properties)
.all

View File

@@ -3,7 +3,7 @@ require 'open_food_network/enterprise_injection_data'
module InjectionHelper
include SerializerHelper
def inject_enterprises(enterprises = Enterprise.activated.includes(address: :state).all)
def inject_enterprises(enterprises = Enterprise.activated.includes(address: [:state, :country]).all)
inject_json_ams(
"enterprises",
enterprises,
@@ -35,13 +35,15 @@ module InjectionHelper
inject_json_ams(
"enterprises",
Enterprise.activated.visible.select(select_only).includes(address: :state).all,
Enterprise.activated.visible.select(select_only).includes(address: [:state, :country]).all,
Api::EnterpriseShopfrontListSerializer
)
end
def inject_enterprise_and_relatives
inject_json_ams "enterprises", current_distributor.relatives_including_self.activated.includes(address: :state).all, Api::EnterpriseSerializer, enterprise_injection_data
inject_json_ams "enterprises",
current_distributor.relatives_including_self.activated.includes(address: [:state, :country]).all,
Api::EnterpriseSerializer, enterprise_injection_data
end
def inject_group_enterprises

View File

@@ -5,5 +5,21 @@ module Spree
def variant_options(v, _options = {})
v.options_text
end
# Overriden to eager-load :states
def available_countries
checkout_zone = Zone.find_by_name(Spree::Config[:checkout_zone])
if checkout_zone && checkout_zone.kind == 'country'
countries = checkout_zone.country_list
else
countries = Country.includes(:states).all
end
countries.collect do |country|
country.name = Spree.t(country.iso, scope: 'country_names', default: country.name)
country
end.sort { |a, b| a.name <=> b.name }
end
end
end