Ruby on Rails查询一对多关系

时间:2017-02-07 10:59:42

标签: ruby-on-rails ruby postgresql

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

API get /venues返回所有场地,每个场地都有所有活动。 在传递一个参数'happenning_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 

2 个答案:

答案 0 :(得分:1)

您可以将其添加到Venue模型中:

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 而不是事件

答案 1 :(得分:0)

假设Venue has_many :eventsEvent belongs_to :venue,您可以执行以下操作:

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