2016-08-09 4 views
0

私はリーグとイベントでスポーツアプリケーションを作っています。イベントにはleague_id、リーグにはnamecountry_nameが含まれています。どのようにすれば、今日、リーグの名前と国とともに、開始日のすべてのイベントを取得することができますか?特定のレコードをフィルタリングするwhere句と結合して、有効レコードをrails

私が試した:

League.joins(:events).where(events: {event_start: Time.zone.now..Time.zone.now.end_of_day}) 

をしかし、これは今日のイベントを持っているすべてのリーグを返し、私は、その特定のリーグからのイベントにアクセスしようとすると、すべてのイベントが含まれているものだけでなく、されています今日はチェックされている。

答えて

2

Eventで始まり、N + 1の問題を回避するために関連するLeagueが含まれています。

Event.includes(:league).where(event_start: Time.zone.now..Time.zone.now.end_of_day) 
+0

をend_of_dayするbeginning_of_dayして検索する必要があると思います!しかし問題は、今私が望む階層構造で反復することができないということです(これは、イベントよりもリーグを繰り返します)。これを解決するために次のように書きました: 'events = Event.includes(:league).where(event_start :Time.zone.now..Time.zone.now.end_of_day) events_hash = {} events.each do | event | \t events_hash [event.league.group] || = {} \t events_hash [event.league.group] [event.league.name] || = [] \t events_hash [event.league.group] [イベント。 league.name] <<イベント 終了 events_hash' これを行うには、より明確なエレガントな方法はありますか? (フォーマットは申し訳ありません) – Reinier

1

今日の日付を開始すると、すべてのイベントを取得するために、私は感謝し、あなたがこの作品

Event.includes(:league).where(event_start: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day) 

または

Event.includes(:league).where("event_start >= ? && event_start <= ?", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day) 
関連する問題