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')