基于created_at在Spree中对产品列表进行排序

时间:2011-09-23 14:25:11

标签: ruby ruby-on-rails-3 spree

我正在使用spree,我想根据产品的created_at对产品列表进行排序。

我试图找到覆盖 lib / scopes / product.rb 下的spree默认范围的方法,但找不到它。

我想在公共面板上列出最近创建的产品。我怎么能用狂欢来做呢?

1 个答案:

答案 0 :(得分:13)

第一个答案将打破管理面板产品版本以及其他可能在spree 1.1-stable中的东西。

  

不明确的列名:created_at

您可以通过使用以下命令指定表名来解决此问题:

 Product.class_eval do
    default_scope order("spree_products.created_at DESC")
 end

但我认为最佳解决方案是修补公共产品控制器或视图,而不是模型本身,因为default_scope可能无处不在,并且切换/删除default_scope中定义的订单,您必须调用 .re 顺序()

可能正因为如此,SpreeCommerce文档特别建议您不要在产品范围中添加订单:

来源:http://guides.spreecommerce.com/scopes_and_groups.html#modifying-available-scopes

所以我认为在不破坏Spree核心产品模型的情况下正确执行此操作的方法是覆盖产品模板:

覆盖 views / spree / shared / _products.html.rb

替换

 <% products.each do |product| %>

 <% products.descend_by_updated_at.each do |product| %>

来源:https://groups.google.com/forum/#!topic/spree-user/lW5sGsbMTfM

为我工作™