Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 按关联字段排序的Rails_Sql_Ruby On Rails_Postgresql - Fatal编程技术网

Sql 按关联字段排序的Rails

Sql 按关联字段排序的Rails,sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,我有以下型号 class User attr_accesible :first_name, :phone_number has_one :user_extension end class UserExtension attr_accessible :company, :user_id belongs_to :user end 我有一个包含所有用户的表。我需要按名字、电话号码、公司对这张表进行排序。 有了名字,电话号码,我没有任何问题,例如,订单可以正常工作 @users =

我有以下型号

class User
  attr_accesible :first_name, :phone_number
  has_one :user_extension
end

class UserExtension
  attr_accessible :company, :user_id
  belongs_to :user
end
我有一个包含所有用户的表。我需要按名字、电话号码、公司对这张表进行排序。 有了名字,电话号码,我没有任何问题,例如,订单可以正常工作

@users = User.order("first_name desc")
,但我也需要按公司分类,不知道怎么做

我可以通过这种方式得到公司名称

@user.user_extension.company
所以我在sql上遇到了麻烦,它会给我公司订购的所有用户。 DB:PostgreSQL。 谢谢

编辑:

我应该提供更多关于这种模式的信息

create_table "user_extensions", :force => true do |t|
  t.integer  "user_id"
  t.string   "company"
end

create_table "users", :force => true do |t|
  t.string   "first_name"
  t.string   "phone_number" 
end
另外,我试着使用join

User.joins(:user_extension).order("user_extension.company desc")
我得到了什么

 User Load (1.6ms)  SELECT "users".* FROM "users" INNER JOIN "user_extensions" ON "user_extensions"."user_id" = "users"."id" ORDER BY user_extension.company desc
PG::Error: ERROR:  relation "user_extensions" does not exist

我也有

PG::Error: ERROR:  relation "user_extensions" does not exist
决心 我的bd有问题,所有连接工作正常

@users=User.order(“User\u extension.company desc”)
应该可以正常工作。

试试以下方法:

@users = User.includes(:user_extension).order("user_extensions.company desc")

我想您需要在
订单上
用户扩展
,而不是
用户扩展

合并可以使查询更小/看起来更清晰,并且在Rails 4.x中对我来说基准测试更快:

@users = User.joins(:user_extension).merge(UserExtension.order(company: :desc))

老话题,也许是离题,但我需要这个。FWIW:

按关联字段排序 让它变得更有趣,创建更多的关联

顺序由联想两个层次构成。 顺序由协会三个层次组成。
可能太晚了,但我遇到了类似的问题,我就是这样实现的:

范围:按公司排序,->{
联接(:user\u extension).order(UserExtension.arel\u表[:company].lower.desc)
}
上述代码应放在
用户模型中


希望能有帮助!我尝试了您的代码,但未成功
User.order(“User\u extension.company desc”)用户加载(1.3ms)选择“users”。*从“users”order BY User\u extension.company desc PG::Error:Error:表“User\u extension”的子句条目中缺少
User.includes如何(:user\u extension).order(“user\u extension.company desc”)
?听起来好像该表不存在。您确定迁移已经运行了吗?您是否尝试过重置和重新格式化数据库?@Roganartu,只是好奇:关联是否有等效的哈希语法(即,等效于
order(company::desc)
?确实如此:user\u extension是一个关联,“user\u extensions”是表名,您需要在order子句中引用表名。很好!我遇到了这个问题!这甚至适用于外部表。我正在从外部SQL源提取数据,这很有效!!谢谢!这在官方文档中到底记录在哪里了?注意:虽然这适用于Postgres,但不适用于Sqlite.h我怎样才能让它在这里工作?答案很好,并且使用了符号。非常感谢。这是我在Rails 5.1上工作时唯一能得到的解决方案。谢谢,Gary。仅供参考:我们知道,作为Rails 5.1.1,这会返回重复的用户,这与连接一样常见。但是,在最后应用
.distinct
会引发如下错误:
错误:for选择不同,按表达式排序必须出现在选择列表中
@users = User.joins(:user_extension).merge(UserExtension.order(company: :desc))
User.includes(:user_extension).order('user_extensions.company ASC')
User.includes(user_extension: :company).order('companies.name ASC')
User.includes(user_extension: { company: :guilds }).order('guilds.secret_knock ASC')