Вы можете поместить запрос в область действия :
class Show < ActiveRecord::Base
scope :future, lambda { where("show_date > ?", Date.today) }
end
Назовите его так:
my_event.shows.future
Редактировать : А-аПонимаю.Чтобы вернуть все события с показом в будущем:
Event.joins(:shows).where("shows.show_date > ?", Date.today)
, это можно ограничить областью действия:
class Event
scope :future, lambda { joins(:shows).where("shows.show_date > ?", Date.today) }
end
С другой стороны, я не уверен в настройке вашегомодели, особенно использование mixin.Вот что я делаю:
class Show < ActiveRecord::Base
belongs_to :event
# use default_scope so shows are ordered by date by default
default_scope order("show_date ASC")
end
class Event < ActiveRecord::Base
has_many :shows
has_and_belongs_to_many :users
scope :future, lambda { joins(:shows).where("shows.show_date > ?", Date.today) }
def start_date
shows.first.show_date
end
def end_date
shows.last.show_date
end
def ends_in_future?
end_date > Date.today
end
end
также было бы чище, если бы столбец show_date
для модели Show был просто назван date
(так что вы могли бы просто написать show.date
вместо show.show_date
),