在现有的产品控制器中,我们根据价格对产品进行分类。
def index
@products = Product.all.order(price: :asc)
@products = @products.paginate(:page => params[:page], :per_page => 20)
end
现在,我想更改排序方式,以便我们引起用户的兴趣。整个排序策略如下:
个项目将在顶部列出。剩余的项目将在之后列出。
在用户感兴趣的分组内,应根据价格订购产品。 (针对非兴趣分组的类似方法)。
用户表
id name interested_categories
1 Alice [ 10, 11 ]
2 Bruce [ 11 ]
3 Carol [ 10, 12 ]
类别表
id category_name
10 School
11 Kitchen
12 Camping
产品表
id product_name price category_id
1 pencil 2 10
答案 0 :(得分:1)
您可以尝试
def index
filtered_products = Product.where(category_id: current_user.interested_categories)
all_products = Product.where.not(category_id: current_user.interested_categories).order(price: :asc)
@final_products = (filtered_products+all_products).paginate(:page => params[:page], :per_page => 20)
end
然后您的视图采用@final_products
或仅将变量更改为@products
答案 1 :(得分:0)
filtered_products = Product.where(category_id: current_user.interested_categories).to_a.sort_by { |product| [product.category, product.price] }
remaining_products = Product.where.not(category_id: current_user.interested_categories).to_a.sort_by { |product| product.price }
@products = filtered_products + remaining_products.paginate
转换为数组可让您使用sort_by
来按两个条件排序。