gpt4 book ai didi

ruby-on-rails - Rails/ActiveRecord : Return order with ActiveRecord#find(Array)

转载 作者:行者123 更新时间:2023-12-03 15:45:23 25 4
gpt4 key购买 nike

我正在使用 Ruby on Rails/ActiveRecord,但在调用 ActiveRecord#find 时遇到问题。我在数据库中存储了最近查看的文档 ID 的序列化数组。 ID 按上次查看时间的降序存储,因此最近查看的文档 ID 在数组中排在第一位。该数组最多包含 10 个 ID。

到现在为止还挺好。问题是 ActiveRecord#find(Array) 似乎忽略了想法在数组中出现的顺序。因此,如果我键入 Document.find([1, 2, 3]),我会得到与 Document.find([3, 2, 1]) 相同的结果。

那么,我的问题是:如何获得与传递给#find 的 ID 顺序相同的 ActiveRecord 结果数组?或者,如果 ActiveRecord 不能直接实现这一点,那么我如何在事后对结果数组进行排序?

非常感谢人们可以贡献的任何答案!

最佳答案

ActiveRecord 是您的数据库的一个接口(interface),它以与数据库返回记录相同的顺序将记录返回给您。如果您不提供“订单”参数,则返回的订单(实际上)是随机的。

如果您的订单按 id 升序或降序排列:

results = SomeModelName.find([1,2,3], :order => "id") # ascending order
results = SomeModelName.find([1,2,3], :order => "id desc") # descending order

如果 id 顺序不是升序或降序:
ids = [1, 3, 2]
r = SomeModelName.find(ids)
results = ids.map{|id| r.detect{|each| each.id == id}}

关于ruby-on-rails - Rails/ActiveRecord : Return order with ActiveRecord#find(Array),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2129824/

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