0

模型Organizer has_many events

Event有属性begin_day:datepublished:boolean

对于尚未发生的事件,我有以下查询:

@organizer.events.order('begin_day asc').where('begin_day >= ?', Date.today).where(published: true).limit(8)

我想将其提取到一个范围,以便它实现如下:

@organizer.upcoming_events.limit(8)

尽管包含关联模型,但如何创建此范围?

4

3 回答 3

1

像这样尝试:

scope :upcoming_events, -> { joins(:events).where("events.begin_day >= ?", Date.today).where(events: {published: true}).order('events.begin_day asc') }
于 2013-09-18T10:46:34.913 回答
1

和助手自动创建字段has_manybelongs_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
于 2013-09-18T10:47:25.573 回答
1

阅读@TheChamp 在他的回答中的推理,似乎只是在查询部分粘贴一个方法同样有效。也可以链式。

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)
于 2013-09-18T11:04:28.013 回答