Myślałem, że wyrzucę to tam, związane z tym wątkiem na wypadek, gdyby ktoś się na niego natknął.
Powinieneś trzymać się z daleka od wywoływania zakresów metodami instancji. Szybko odkryjesz, że debugujesz problemy z wydajnością. Zakresy zawsze ZAWSZE wracają do bazy danych, niezależnie od tego, czy relacja jest uwzględniona.
tj.
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