ruby-on-rails - 按 id 数组获取元素并按此数组排序

标签 ruby-on-rails activerecord ruby-on-rails-5

例如,我想要通过 id 数组获取产品,但我希望这些产品与 id 数组的顺序相同。

例如,我想要 id 为 6、3、8 的产品:

ids = [6, 3, 8]
Product.where(id: ids)

它给了我产品,但第一个是 id = 3 的产品,第二个是 id = 6 的产品...

我希望这些产品与 ids 数组的顺序相同。我想要 id = 6 的第一个产品,id = 3 的第二个产品...

我怎样才能在产品查询中做到这一点?

最佳答案

索引应该工作:

Product.where(id: ids).index_by(&:id).values_at(*ids)

或者只是(在 MySQL 中检查,但如果 ID 来自外部来源,则在 ids 之前清理):

Product.where(id: ids).order("field(id, #{ids.join(', ')})")

关于ruby-on-rails - 按 id 数组获取元素并按此数组排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47326634/

相关文章:

css - 如何去掉列表项旁边的点?

ruby-on-rails - 在保留 html 实体的同时在 Rails 中保持 html_safe?

ruby-on-rails - 警告 : Can't verify CSRF token authenticity rails

ruby-on-rails-3 - 如何取消 before_add 关联回调中的保存?

ruby-on-rails - 随着 Rails 4.2.3 改变 where_values 的行为,我如何获得 where_values 的有效 SQL?

ruby-on-rails - 分组错误 : ERROR: column must appear in the GROUP BY clause or be used in an aggregate function

ruby-on-rails - rails new project_name 使用 rvm

ruby-on-rails - 将多个验证包装在上下文中

ruby-on-rails - 源表别名

ruby-on-rails - Rails 5 Controller 中找不到自定义模块功能