Ruby on rails 按顺序生成的集合顺序的Rails搜索条件

Ruby on rails 按顺序生成的集合顺序的Rails搜索条件,ruby-on-rails,Ruby On Rails,正在收集一组ID @valid_ts = [] @valid_ts = @valid_ts << dst_1.id @valid_ts = @valid_ts << dst_2.id 目标是按照这些成员添加到集合中的顺序生成集合。Rails在处默认为updated\u,否则查询必须调用类的一个属性,这些属性对目标上下文都没有用处 Rails如何遵守数组的原始顺序?如果您使用的是Mysql,则可以使用字段函数 Timeslot.where(id: @valid_ts).

正在收集一组ID

@valid_ts = []
@valid_ts = @valid_ts << dst_1.id 
@valid_ts = @valid_ts << dst_2.id
目标是按照这些成员添加到集合中的顺序生成集合。Rails在处默认为
updated\u,否则查询必须调用类的一个属性,这些属性对目标上下文都没有用处


Rails如何遵守数组的原始顺序?

如果您使用的是
Mysql
,则可以使用
字段
函数

Timeslot.where(id: @valid_ts).order("field(id, #{ids.join ','})")
如果您使用的是
Postgres
,则可以使用
position
功能-

Timeslot.where(id: @valid_ts).order("position(id::text in '#{ids.join(',')}')")
但是,如果您使用的是从该版本添加的
rails>=5.2.0
,则ActiveRecord可以同时执行这两个功能。最有可能的是,它也在
rails 5.0
中进行了后端口。和,和


查看本文了解更多信息。

您使用的是什么数据库?
时隙。查找(@valid\u ts)
将不起作用,因为Rails不知道排序标准,默认为updated\u at属性。您的链接确实为AR查询提供了一个很好的方向。因此,我重新提出了这个问题,因为这有其特殊性。将随后删除此项,因为它可能太小。您尝试过吗?我自己在一张桌子上试过。它在我提供数组时返回。它在轨道上。pull request-提交-编辑带有链接的答案,
find
返回的记录与您提供的ID的顺序相同。如果希望结果按数据库排序,可以使用ActiveRecord::QueryMethods#where(取自文档)。rails 5.2语法正确,但对于rails 4,Postgre搜索语法失败,出现错误
未定义的局部变量或方法“id”
Timeslot.where(id: @valid_ts).order("position(id::text in '#{ids.join(',')}')")
Timeslot.find(@valid_ts)