Ruby on Rails 查询一对多关系



我有两个桌子场地,events,一个场地可以有多个活动,但一个活动只能有一个场地。

API get /venues返回所有场地,以及每个场地的所有事件。在传递参数"happening_today"时得到/venues?happening_today=true,我需要展示我的所有场地,并且只显示每个场地的那些start_date与今天相同的活动!如果没有事件,则应显示空数组。

def index
   venues = Venue.all venues = venues.eager_load(:event).where("events.start_time >= ?", Date.today)
   venues = JSON.parse(venues.to_json(:include => [:category, :offer, :event])) 
   render json: {venues: venues}, status: 200
 end 

您可以将以下内容添加到您的场地模型中:

has_many :todays_events, -> { where(start_date: DateTime.now.beginning_of_day..DateTime.now.end_of_day) }, class_name: 'Event'

然后执行此操作:

venues = Venue.includes(:todays_events)
JSON.parse(venues.to_json(include: [:category, :offer, :todays_events])) 

缺点是 JSON 中事件的键将是 todays_events 而不是事件

假设Venue has_many :eventsEvent belongs_to :venue,你可以做这样的事情:

Venue.includes(:events).where("events.start_date BETWEEN ? AND ?", Today.beginning_of_day, Today.end_of_day)

最新更新