我有这个活动记录查询:
shop = Shop.find(12934)
然后我像这样从这家商店买了一系列产品
@product_templates = []
shop.products.each do |product|
@product_templates.push(product.template)
end
所以现在我有一个活动记录对象数组,如下所示:
[
#<Product::Template id: 185549, name: "1:30pm", position: 0>,
#<Product::Template id: 185522, name: "11:30am", position: 1>,
#<Product::Template id: 185580, name: "7:00pm", position: 2>,
#<Product::Template id: 185556, name: "10:00am", position: 3>,
]
我想通过按名称排序每个position
的时间来更新Product::Template
属性,例如
10:00 am、11:30am、1:30pm、7:00pm是对象的顺序,因此10:00 am对象将获得位置:0,7:00 pm将获得位置:3,依此类推。
我该怎么做?谢谢您的时间
答案 0 :(得分:1)
尝试一下:
@product_templates.sort { |t1, t2| Time.strptime(t1, "%I:%M%P") <=> Time.strptime(t2, "%I:%M%P") }.each_with_index { |template, index| product.position = index }
我要做的是先对模板数组进行排序,然后根据数组索引更新位置。
答案 1 :(得分:0)
首先,在排序之前填充@product_templates
的方法不是一个好方法。
@product_templates =
shop.products
.map(&:template)
.sort_by{|template| template.name.to_time}