Сортировка списков продуктов в Spree на основе created_at

Я использую Spree и хочу отсортировать список продуктов на основе created_at продукта.

Я попытался найти способ переопределить область видимости по умолчанию в разделе lib/scopes/product.rb, но не смог ее найти.

Я хочу вывести недавно созданные продукты на общедоступную панель. Как я могу сделать это с весельем?


person Hussam Ali    schedule 23.09.2011    source источник


Ответы (1)


Первый ответ сломает версию продукта панели администратора и, возможно, другие вещи в стабильной версии 1.1.

неоднозначное имя столбца: 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

Работает на меня™

person j15e    schedule 02.08.2012
comment
С этим можно справиться немного более детально с переопределением искажения, а не с переопределением всего представления, но кажется, что этот ответ более информативен, чем тот, который помечен как принятый. - person Binary Phile; 21.02.2013