gpt4 book ai didi

mysql - ORDER BY 相关型号 rails 4

转载 作者:行者123 更新时间:2023-11-29 11:32:35 24 4
gpt4 key购买 nike

我一直在尝试在铁路项目的索引 View 中添加 order_by 过滤器。

到目前为止,它在一些基础知识(按过滤器顺序)方面运行良好。

我现在尝试通过附加到我的项目的工作人员登录名进行订购。

class Project < ActiveRecord::Base
belongs_to :worker, class_name: User, foreign_key: "worker_id"

我在模型中使用“范围”对数据进行排序,到目前为止,这就是我得到的:

  scope :worker_order, -> (order) {joins('LEFT JOIN users ON users.id = projects.worker_id')
.order('users.login' => order)}

但我收到此错误代码:

Mysql2::Error: Unknown column 'projects.users.login' in 'order clause': SELECT projects.* FROM projects LEFT JOIN users ON users.id = projects.worker_id ORDER BY projects.users.login DESC LIMIT 30 OFFSET 0

我还尝试过其他方法:

  scope :worker_order, -> (order) {joins('LEFT JOIN users ON users.id = projects.worker_id')
.order(:login => order)}

或者:

  scope :worker_order, -> (order) {includes(:worker)
.order('users.login' => order)}

我真的不知道这是否是处理 Rails 中排序的好方法,但它对于过滤效果很好,我真的不明白为什么我对拥有该项目的客户的过滤器有效,而这种排序方法不起作用.

感谢您的帮助

最佳答案

尝试使用字符串

scope :worker_order, -> (order) { joins('...').order("users.login #{order == 'desc' ? 'desc' : 'asc'}")

顺序 == 'desc' ? 'desc' : 'asc'部分是为了防止SQL注入(inject)。如果您确定订单不能被您的用户操纵,您可以这样写:

scope :worker_order, -> (order) { joins('...').order("users.login #{order}")

关于mysql - ORDER BY 相关型号 rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37158185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com