gpt4 book ai didi

ruby-on-rails - ActiveRecord 更改或重置范围中定义的排序

转载 作者:行者123 更新时间:2023-12-04 06:13:24 32 4
gpt4 key购买 nike

我有一个使用另一个函数输出的函数:一个 ActiveRecord::Relation 对象。这个关系已经有一个 order 子句:

# This function cannot be changed
def black_box
Product.where('...').order("name")
end

def my_func
black_box.order("id")
end

当我执行关系时,ORDER_BY 子句按顺序函数排序:
SELECT * FROM products
WHERE ...
ORDER_BY('name', 'id') // The first order function, then the second

有什么方法可以指定在前一个之前插入我的订单函数的关系吗?那么 SQL 会像这样吗?
SELECT * FROM products
WHERE ...
ORDER_BY('id', 'name')

最佳答案

您可以使用 reorder重置原始订单并按列添加新订单的方法。

重新排序(*参数)

用指定的顺序替换在关系上定义的任何现有顺序。

User.order('email DESC').reorder('id ASC') # generated SQL has 'ORDER BY id ASC'

将追加对同一关系进行订购的后续调用。例如:
User.order('email DESC').reorder('id ASC').order('name ASC')
# generates a query with 'ORDER BY id ASC, name ASC'.

关于ruby-on-rails - ActiveRecord 更改或重置范围中定义的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470801/

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