如何按附加表的特定优先级对activerecord查询进行排序



当我尝试使用"大小写"排序时通过连接表的字段,返回以下错误:

PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY表达式必须出现在选择列表

<Table1>.includes(:difficulty_level).order(difficulty_level_priority('ASC'))

def difficulty_level_priority(direction)
"
CASE
WHEN difficulty_levels.name = 'first' THEN '1'
WHEN difficulty_levels.name = 'second' THEN '2'
WHEN difficulty_levels.name = 'third' THEN '3'
WHEN difficulty_levels.name = 'last' THEN '4'
END  #{direction.upcase}"
end

但是简单的按名称排序是正确的。这样的:

<Table1>.includes(:difficulty_level).order('difficulty_levels.name ASC')

我试着粘贴select('"difficulty_levels".*')和group(<有些列(>)后面包含()。

看起来您正在尝试按连接表的字段排序,但您正在尝试排序的字段不在选择列表中。您需要将要排序的字段添加到选择列表中。