例如,假设我有一个名为Products的模型,并在Products控制器中为product_list视图显示以下代码,以显示排序的产品。重新排序轨道中的活动记录而不重新查询数据库?
@products = Product.order(params[:order_by])
并让我们想象在product_list视图中,用户可以使用下拉列表按价格,评分,重量等进行排序。数据库中的产品不会频繁更改。
我很难理解的是,当用户选择一个新的order_by过滤器时,rails是否必须查询,或者rails会以某种方式缓存活动记录以便在服务器端进行重新排序?有没有办法写它,所以如果用户排序,rails将不会重新查询结果?
感谢,
如何/你在哪里缓存ActiveRecord对象?如果对象仅在实例变量中,则这些对象不会在请求之间留在内存中。它们存储在memcache或类似的东西吗?如果你不想运行另一个查询来检索对象,你可以做排序客户端(在JavaScript中)。 – Coenwulf
要添加到@Coenwulf,我发现DataTables插件可以让jquery在显示对象列表时很有用。它内置分类功能。 [链接](https://datatables.net) –
关闭主题:不要这样做'Product.order(params [:order_by])'这是activerecord不会消毒用户输入的地方之一 - 它是开放的SQL注入攻击,阅读此http://stackoverflow.com/questions/7771103/rails-3-activerecord-order-what-is-the-proper-sql-injection-work-around的更多信息 – house9