Позиция заказа на модели во время обновления - PullRequest
1 голос
/ 29 февраля 2012

Я использую act_as_list в моей модели продукта и пытаюсь сделать так, чтобы вы могли вручную редактировать позицию. В настоящее время, если я отредактирую Продукт 3 с позиции 3 на позицию 1, он не будет корректировать другие продукты

Пример: перемещение продукта из положения 3 в положение 1

ID Имя Должность
1 продукт 1
2 Продукт 2
3 Продукт 3

приведет к

ID Имя Должность
1 продукт 1
2 Продукт 2
3 Продукт 1

Но мне нужно, чтобы результат составил

Идентификационное имя Позиция
1 продукт 2
2 Продукт 3
3 Продукт 1

Я пришел к выводу, что я должен добавить код в мой класс обновления продуктов. Вот что у меня есть:

def update
#To edit acts_as_list manually, just get all items with a position higher 
#than the current item and increment each one.

#Find the product to be changed
@product = Product.find(params[:id])

#Find if there is a product already in the requested position
old_product = Product.find_by_position_and_category_id(params[:position], params[:category_id])



  #If the old product has a position less then the current product, return the products in between minus 1
  if @product.position > old_product.position
    products = Product.where(:product < @product.position, :product > @old_product.position)
    products.each do |product|
      product.position + 1
    end
  #If old product position is greater then current product position, return the products in between and decrement all position
  elsif old_product.position < @product.position
    products = Product.all
    products.each do |product|
      product.position = product.position - 1
    end
 end

В этом коде я пытаюсь захватить все продукты в пределах ассортимента старого и нового продукта, а затем увеличить позиции всех из них, но мой код не работает. Похоже, вызов old_product = Product.find_by_position_and_category_id (params [: position], params [: category_id]) продолжает возвращать ноль, когда он должен возвращать продукт с позицией старого продукта.

Спасибо за любую помощь, и дайте мне знать, если я на правильном пути или есть более простой способ сделать это.

1 Ответ

2 голосов
/ 29 февраля 2012

acts_as_list предоставляет вспомогательные методы для выполнения подобных задач без необходимости добавления собственного кода.Если вы хотите переместить ваш продукт из позиции 3 в позицию 1 и автоматически изменить порядок всего остального, сделайте следующее:

@product.insert_at(1)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...