2015-12-29 53 views
0

讓模型Item具有屬性id,name和DB中的具體記錄名稱'other'將特定物品移動到最後位置

如何獲取單個SQL查詢ActiveRecord::Relation對象的物品排序方式other物品處於最後位置? 作爲臨時解決方案,我使用了Item.where.not(name: 'other') + Item.where(name: 'other'),但它導致了2個查詢。

注意:這不是一個真實的代碼,而是一個非常簡單的例子。

+0

你可以使用[預先加載(http://guides.rubyonrails.org/active_record_querying.html#eager-loading - 關聯) – VKatz

+0

@Vinay,'Eager Loading'用於關聯記錄。情況並非如此。 – yurko

回答

0

與添加類方法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 
0

也許類似下面會幫助 - 我們閱讀所有Item S,並用切片刪除Itemname等於other,並在年底追加回陣列。

a = Item.all.tap do |arr| 
    arr << arr.slice!(arr.index { |t| t.name == "other"}) 
end 
0

如果我找到你的權利,那麼你正在尋找一個SQL查詢,對嗎?那麼你可以嘗試這樣的事情:

select id, name 
from (
    select id, name, decode(name, 'other', 999, 1) as sort 
    from items 
) 
order by sort 

我現在沒有數據庫來測試語句。但我認爲你明白了。

好運