ruby-on-rails - 在不重新查询数据库的情况下重新排序 Rails 中的事件记录?

标签 ruby-on-rails ruby sorting caching activerecord

例如,假设我有一个名为 Products 的模型,并且在 Products Controller 中,我有以下代码用于 product_list View 以显示已排序的产品。

@products = Product.order(params[:order_by])

让我们想象一下,在 product_list View 中,用户可以使用下拉菜单按价格、评级、重量等进行排序。数据库中的产品不会经常更改。

我很难理解的是,每次用户选择新的 order_by 过滤器时,rails 是否必须查询,或者 rails 是否能够以某种方式缓存事件记录以在服务器端重新排序?有没有一种方法可以编写它,以便在用户排序时 rails 不会重新查询结果? (即,如果产品表不经常更改,那么如果用户只想按不同的变量排序,则进行查询是没有意义的)

谢谢,

最佳答案

您可能正在寻找 sort_by 方法。它将允许您在服务器端对集合进行排序,而无需使用任何事件记录查询。

此代码结果:

@products = Product.all
@products = @products.sort_by {|product| product.name} # Ruby Sorting

应该和

一样
@products = Product.order(:name) # SQL sorting

关于ruby-on-rails - 在不重新查询数据库的情况下重新排序 Rails 中的事件记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22049725/

相关文章:

javascript - 了解 Javascript .sort 参数

iPhone CoreData - 如何获取托管对象,并对它们进行排序而忽略大小写?

ruby-on-rails - 使用 ActiveModel::Validations 验证嵌套模型

javascript - 将 Tailwind 添加到 Solidus 商店

mysql - 了解 Ruby 渲染

ruby - 检查互联网连接

ruby-on-rails - Rails ActiveRecord 对象的序列化,包括关联

mysql - Ruby on Rails 服务器连接错误

ruby - Thread#run 和 Thread#wakeup 之间的区别?

bash - 根据包含数字和不包含数字的行对 CSV 中的行进行排序