Думал, что я выброшу это, связанное с этим потоком, на случай, если кто-то наткнется на него.
Вы должны держаться подальше от вызова областей действия из методов экземпляра.Вы быстро обнаружите проблемы с производительностью.Области ВСЕГДА возвращаются в базу данных независимо от того, включены ли отношения.
Т.е.
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