gpt4 book ai didi

ruby-on-rails - 更新期间模型上的订购位置

转载 作者:行者123 更新时间:2023-12-04 05:56:13 25 4
gpt4 key购买 nike

我在我的产品模型上使用了acts_as_list,并尝试使用它以便您可以手动编辑位置。目前,如果我将产品 3 从位置 3 编辑到位置 1,则不会调整其他产品

示例:将产品从位置 3 移动到位置 1

ID 姓名 职位
1 产品 1
2 产品 2
3 产品 3

将导致

ID 姓名 职位
1 产品 1
2 产品 2
3 产品 1

但我需要它来导致

ID 姓名 职位
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]) 一直返回 nil,当它应该返回具有旧产品位置的产品时。

感谢您的帮助,如果我在正确的 rails 上,或者是否有更简单的方法,请告诉我。

最佳答案

acts_as_list提供了帮助方法来完成这类事情,而无需添加您自己的代码。如果您想将产品从位置 3 移动到位置 1 并自动重新排序其他所有产品,请执行以下操作:

@product.insert_at(1)

尝试这样做而不是手动更改位置,看看这是否不会简化您的代码。

关于ruby-on-rails - 更新期间模型上的订购位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com