Pensé en tirar esto relacionado con este hilo en caso de que alguien se tropiece con él.
Debe evitar los ámbitos de llamada desde métodos de instancia. Pronto se encontrará eliminando problemas de rendimiento. Los ámbitos SIEMPRE volverán a la base de datos independientemente de si se incluye una relación.
I.e.
class Show
has_many :episodes
def awesome_episodes
episodes.awesome # THIS IS BAD!!
# should stay in ruby land with episodes.select { |ep| ep.status == "awesome" }
# OR push a method #awesome? to the episode class and then the
# syntax becomes nicer: episodes.select(&:awesome?)
# This way, the onus is on the caller to include the relationship
end
end
class Episode
belongs_to :show
scope :awesome,()-> { where(status: 'awesome') }
end
shows = Show.includes(:episodes)
shows.map do |show|
show.awesome_episodes # fires a query every loop
end