例如,假設我有一個名爲Products的模型,並在Products控制器中爲product_list視圖顯示以下代碼,以顯示排序的產品。重新排序軌道中的活動記錄而不重新查詢數據庫?
@products = Product.order(params[:order_by])
並讓我們想象在product_list視圖中,用戶可以使用下拉列表按價格,評分,重量等進行排序。數據庫中的產品不會頻繁更改。
我很難理解的是,當用戶選擇一個新的order_by過濾器時,rails是否必須查詢,或者rails會以某種方式緩存活動記錄以便在服務器端進行重新排序?有沒有辦法寫它,所以如果用戶排序,rails將不會重新查詢結果?
感謝,
如何/你在哪裏緩存ActiveRecord對象?如果對象僅在實例變量中,則這些對象不會在請求之間留在內存中。它們存儲在memcache或類似的東西嗎?如果你不想運行另一個查詢來檢索對象,你可以做排序客戶端(在JavaScript中)。 – Coenwulf
要添加到@Coenwulf,我發現DataTables插件可以讓jquery在顯示對象列表時很有用。它內置分類功能。 [鏈接](https://datatables.net) –
關閉主題:不要這樣做'Product.order(params [:order_by])'這是activerecord不會消毒用戶輸入的地方之一 - 它是開放的SQL注入攻擊,閱讀此http://stackoverflow.com/questions/7771103/rails-3-activerecord-order-what-is-the-proper-sql-injection-work-around的更多信息 – house9