2013-07-30 49 views

回答

2

取決於你如何定義@products,你也可以使用順序,如:

Product.order('created_at DESC') 

,將顯示所有產品以降序被created_at排序。

但是,如果您使用Product.all.order('created_at DESC'),例如,它將不起作用,因爲.all將結果轉換爲數組。在這種情況下,您需要使用sort_by,如其他答案所示。

只要您沒有在陣列上使用它,訂單就可以在您的模型中工作。

+0

如果可能的話,這比使用Ruby對返回的記錄數組進行排序更可取(**效率更高**)。 –

+0

我有@ products = current_user.products,所以我猜@ products = current_user.products.order('created_at DESC')應該可以工作,對嗎? – iCyborg

+1

是的,ActiveRecord會正確地結合範圍和順序。 –

1

寫在你的控制器

@products = @products.sort_by {|obj| obj.created_at }.reverse

我想這應該解決您的問題。

+0

我可以在模型級別做這個嗎?它有什麼區別? – iCyborg

+1

我得到ndefined方法'sort_by'錯誤 – iCyborg

+0

可能必須是'@ products.all.sort_by' ...因爲.all將允許您調用Enumerable函數#sort_by。不過,我仍然建議通過數據庫來做這件事,因爲這是數據庫製作的。 –

相關問題