讓模型Item
具有屬性id
,name
和DB中的具體記錄名稱'other'
。將特定物品移動到最後位置
如何獲取單個SQL查詢ActiveRecord::Relation
對象的物品排序方式other
物品處於最後位置? 作爲臨時解決方案,我使用了Item.where.not(name: 'other') + Item.where(name: 'other')
,但它導致了2個查詢。
注意:這不是一個真實的代碼,而是一個非常簡單的例子。
讓模型Item
具有屬性id
,name
和DB中的具體記錄名稱'other'
。將特定物品移動到最後位置
如何獲取單個SQL查詢ActiveRecord::Relation
對象的物品排序方式other
物品處於最後位置? 作爲臨時解決方案,我使用了Item.where.not(name: 'other') + Item.where(name: 'other')
,但它導致了2個查詢。
注意:這不是一個真實的代碼,而是一個非常簡單的例子。
與添加類方法Item
模型解決:
def self.sorted
find_by_sql("SELECT * FROM items ORDER BY (CASE name WHEN 'other' THEN 0 ELSE 1 END) DESC, id ASC")
end
也許類似下面會幫助 - 我們閱讀所有Item
S,並用切片刪除Item
與name
等於other
,並在年底追加回陣列。
a = Item.all.tap do |arr|
arr << arr.slice!(arr.index { |t| t.name == "other"})
end
如果我找到你的權利,那麼你正在尋找一個SQL查詢,對嗎?那麼你可以嘗試這樣的事情:
select id, name
from (
select id, name, decode(name, 'other', 999, 1) as sort
from items
)
order by sort
我現在沒有數據庫來測試語句。但我認爲你明白了。
好運
你可以使用[預先加載(http://guides.rubyonrails.org/active_record_querying.html#eager-loading - 關聯) – VKatz
@Vinay,'Eager Loading'用於關聯記錄。情況並非如此。 – yurko