Ruby on rails 在轨道中使用合并和按顺序连接

Ruby on rails 在轨道中使用合并和按顺序连接,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我在Rails中遇到了一个问题,我无法在同一个查询中正确使用JOIN和multiple ORDER BYs(其中一个是合并函数)。这在SQL中是非法的(值得怀疑),还是仅仅是Rails实现的问题?还有,我怎样才能避开它 # Works! Post.joins(:author).order("COALESCE(title, '---') DESC") => SELECT "posts".* FROM "posts" INNER JOIN "authors" ON "posts"."auth

我在Rails中遇到了一个问题,我无法在同一个查询中正确使用JOIN和multiple ORDER BYs(其中一个是合并函数)。这在SQL中是非法的(值得怀疑),还是仅仅是Rails实现的问题?还有,我怎样才能避开它

# Works!
Post.joins(:author).order("COALESCE(title, '---') DESC")
=> SELECT  "posts".* FROM "posts" INNER JOIN "authors" ON "posts"."author_id" = "authors"."id" ORDER BY COALESCE(title DESC, '--')

# Fails - syntax error in SQL
Post.joins(:author).order("COALESCE(title, '---') DESC").last #last should automatically apply an ORDER BY id DESC;
=> SELECT  "posts".* FROM "posts" INNER JOIN "authors" ON "posts"."author_id" = "authors"."id" ORDER BY COALESCE(title DESC, '--') ASC LIMIT 1

它看起来像是
。last
ASC LIMIT 1
应用于SQL查询。这似乎混淆了rails语法解析器,并将DESC移动到一个奇怪的位置,从而导致错误

SELECT "discussion_topics".* FROM "discussion_topics" ORDER BY COALESCE(title DESC, '---') ASC LIMIT 1
相对于

SELECT "discussion_topics".* FROM "discussion_topics" ORDER BY COALESCE(title, '---') DESC

您可能可以将
DESC
更改为
ASC
,并首先安全地使用

对于Postgres,我会尝试


Post.select(“COALESCE(title)”--“DESC”).joins(:author.order(“COALESCE(title)”--“DESC”).limit(1)

您使用的是什么数据库客户端?Post.joins(:author.order(“COALESCE(title)”--“DESC”)@ilanberci?这就是我写的