在我的Rails 3.2.11应用程序中,我有一个范围,我正在尝试根据相关属性进行排序。在我的例子中,我有一个用户模型和一个配置文件模型。用户has_one配置文件,我的范围位于配置文件表的属性上。这是范围:
User.rb
:
def self.with_default_show
joins(:profile).where("profiles.show_all = true")
end
然而,我遇到的麻烦是试图在那上面宣布订单。例如,运行:
joins(:profile).where("profiles.show_all = true").order("profiles.first_name DESC")
给我一个错误:
PG::Error: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
我知道我可以执行.order("2")
但是会在我的“用户”表中调用第二列,而不是我的“个人档案”表。如何通过profiles.first_name?
答案 0 :(得分:2)
ORDER BY子句只能在应用DISTINCT后应用。
此外,您必须明确选择您要订购的子句。
User.select('profiles.*, profiles.first_name')
.joins(:profile)
.where("profiles.show_all = true")
.order("profiles.first_name DESC")
如上所示,为了让您的查询返回Profile属性,您还必须明确选择它们。
答案 1 :(得分:0)
最终工作的结果是上述两个答案的组合:
def self.with_default_show
joins(:profile)
.where(profiles: {show_all: true})
.select('users.*, profiles.first_name')
.order('profiles.first_name')
end
按照我的希望进行排序。