我需要将 1 个产品放在列表的顶部。我试过了:
@allProd = Product.where(service_id:params[:id], product_category_id:descenId).order(rating: :desc).paginate(:page => params[:page], :per_page => 8)
tmp = @allProd[0]
indx = @allProd.find_index(Product.find(prodId))
@allProd[0] = @allProd[indx]
@allProd[indx] = tmp
但是数据数组没有改变。执行此操作的最佳方法是什么?
更新: 最终解决方案是
@allProd = Product.where(service_id:params[:id], product_category_id:descenId).order(rating: :desc).paginate(:page => params[:page], :per_page => 8).to_a
@allProd.delete(Product.find(prodId))
@allProd = @allProd.unshift(Product.find(prodId))
但请记住,如果转移的产品不在第一页,您将遇到分页产品数量的问题。但对我来说,没关系)
最佳答案
我不是 100% 确定这就是您要实现的目标,但可以尝试
@allProd = Product.where(service_id:params[:id], product_category_id:descenId).order(rating: :desc).paginate(:page => params[:page], :per_page => 8).to_a.unshift(Product.find(prodId))
我假设在每个页面上,id 为 prodId 的 Product 将是第一个。
关于ruby-on-rails - rails activerecord交换数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827159/