Class Event
has_many event_sessions
Class EventSessions
belongs_to event
Event Sessions table:
t.integer "event_id"
t.datetime "date_start"
t.datetime "date_end"
我的目标是:
按日期范围过滤事件(例如,2019年4月5日至5月10日)
通过最早的事件会话的开始日期订购事件(最快和最新的订购)。会话数没有限制。
我遇到了以下问题:
重复事件在过滤和排序后出现(重复事件的数量等于与事件关联的事件会话的数量,因此3个事件会话导致出现3个相同事件)。
无法使用.distinct删除重复项
如果有什么区别,我正在使用PostgreSQL。
这是我当前的代码:
events = joins(:event_sessions)
.where(event_sessions: { date_start: date_start..date_end } )
.order('event_sessions.date_start ASC')
尝试使用.distinct时遇到以下错误:
PG :: InvalidColumnReference:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
此外,我无法使用.uniq,因为它不能与.paginate一起使用(.uniq将其转换为数组)。
我找到了解决方法(感谢Rails - Distinct ON after a join):
join_query = EventSession.select("event_id, min(date_start) as date").group(1)
events = Event.joins("INNER JOIN (#{join_query.to_sql}) as unique_event_sessions ON events.id = unique_event_sessions.event_id")
.where("date >= ?", date_start).where("date <= ?", date_end)
.order('date ASC')
答案 0 :(得分:0)
甚至将event_sessions属性添加到select子句中,以使用不同的
>msbuild helloworld.csproj -t:Build.
答案 1 :(得分:0)
我发现了一些可行的方法:
join_query = EventSession.select("event_id, min(date_start) as date").group(1)
events = Event.joins("INNER JOIN (#{join_query.to_sql}) as unique_event_sessions ON
events.id = unique_event_sessions.event_id")
.where("date >= ?", date_start).where("date <= ?", date_end)
.order('date ASC')