我有一个Message
ActiveRecord 模型,我想选择所有具有不同conversation_partner_id
. 我目前将该DISTINCT ON
子句指定为字符串,但我想知道是否可以将其作为Arel
表达式提供,以及是否会有好处。我的陈述如下:
Message.select('DISTINCT ON ("messages"."conversation_partner_id") messages.*').from(t)
wheret
是messages
表的并集,并指定为有点复杂的Arel
表达式。我把它排除在外,因为它独立于SELECT
问题并且工作得很好。
以下代码不起作用:
Message.select([
Arel::Nodes::DistinctOn.new(Message.arel_table[:conversation_partner_id]),
Message.arel_table[Arel.star]
]).from(t)
它会导致格式错误的 SQL,因为它在DISTINCT ON ()
子句后放置一个逗号:
SELECT DISTINCT ON ("messages"."conversation_partner_id"), "messages".* ...
^