私は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)
DISTINCT ON ()
句の後にコンマを配置すると、不正な形式の SQL になります。
SELECT DISTINCT ON ("messages"."conversation_partner_id"), "messages".* ...
^