模型Organizer
has_many
events
。
Event
具有begin_day:date
和published:boolean
属性。
我对尚未发生的事件有以下查询:
@organizer.events.order('begin_day asc').where('begin_day >= ?', Date.today).where(published: true).limit(8)
我想将其扩展到范围,以便它实现如下:
@organizer.upcoming_events.limit(8)
如何创建此范围,但包含相关模型?
答案 0 :(得分:1)
尝试这样的smth:
scope :upcoming_events, -> { joins(:events).where("events.begin_day >= ?", Date.today).where(events: {published: true}).order('events.begin_day asc') }
答案 1 :(得分:1)
has_many
和belongs_to
帮助程序会自动创建允许您加入两个模型的字段和范围,在用户定义的范围内,您必须手动加入这些模型。 ;)
class Event
belongs_to :organizer
end
class Organizer
has_many :events
scope :upcoming_events, joins(:events).order('begin_day asc').where('begin_day >= ?', Date.today).where(published: true)
# lol007's query
scope :upcoming_events, -> { joins(:events).where("events.begin_day >= ?", Date.today).where(events: {published: true}).order('events.begin_day asc') }
end
end
答案 2 :(得分:1)
在他的回答中阅读@Champ的推理,似乎只是在查询部分中粘贴方法同样有效。可连锁的。
class Event
belongs_to :organizer
end
class Organizer
has_many :events
def upcoming_events
self.events.order('begin_day asc').where('begin_day >= ?', Date.today).where(published: true)
end
end
end
现在可以使用:
@organizer.upcoming_events.limit(8)