我有一个模型,topic
,包括:
has_many :messages, -> { order('source_answer_id asc nulls first').order(id: :asc) }
在其他地方,当试图调用这种关系时,它会破坏某些参数。例如,以下结果会导致错误。
topic.messages.last.id
结果
ActiveRecord::StatementInvalid: PG::SyntaxError: ERROR: syntax error at or near "DESC"
LINE 1: ..." = $1 ORDER BY source_answer_id asc nulls first DESC, "mes...
^
: SELECT "message".* FROM "message" WHERE "message"."topic_id" = $1 ORDER BY source_answer_id asc nulls first DESC, "message"."id" DESC LIMIT 1
我认为这是因为nulls first
会混淆asc
。
如何让ActivieRecord与nulls first
玩得很好?
答案 0 :(得分:0)
DESC和ASC表示空值无效。它们在非空值之前或之后出现:
NULLS FIRST和NULLS LAST选项可用于确定在排序顺序中非空值之前或之后是否出现空值。默认情况下,null值排序为大于任何非null值;也就是说,NULLS FIRST是DESC订单的默认值,否则为NULLS LAST。
这个order by
第一个排序的source_answer_id以空值递增,第一个以null结尾降序的message.id排在最后
ORDER BY source_answer_id ASC NULLS FIRST,"message"."id" DESC NULLS LAST limit 1