2017-05-25 83 views
2

在我的控制器中我得到按類別分組的所有額外命令:軌道組通過,並經柱

def index 
    @categories = Extra.all.group_by(&:category) 
end 

結果是像哈希值的數組:

{#<Category id:1, sort:2> => [#<Extra id:1>,#<Extra id:2], 
#<Category id:2, sort: 1> => [#<Extra id:3>,#<Extra id:4>]} 

我想按類別「排序」列,而不是ID,至極應該是這樣的:

{#<Category id:2, sort:1> => [#<Extra id:3>,#<Extra id:4], 
#<Category id:1, sort: 2> => [#<Extra id:1>,#<Extra id:2>]} 

當我嘗試:

def index 
    @categories = Extra.all.group_by(&:category).sort_by{|s| s[:sort]} 
end 

我得到「沒有將符號隱式轉換爲整數」。那是因爲我在「sort_by」中使用了一個符號嗎?

回答

3

試試這個,group_by將返回hash,你試圖調用[:sort]上的[#<Category id:2, sort:1>, [#<Extra id:3>,#<Extra id:4]]

數組你應該採取他們在兩個變量|key, value|和關鍵將是category

def index 
    @categories = Extra.all.group_by(&:category).sort_by{|category, _extras| category.sort } 
end 
+0

這就是我想要的。這是兩個變量的好點!謝謝 –

1

使用order方法做在數據庫中的排序:

@categories = Extra.order(sort: :asc).group_by(&:category) 
+0

我試過你的建議,我相信只有通過排序才能訂購額外產品,因爲它直接鏈接到Extra類。 @ deepak-mahakale在分類後者(分類)中工作。謝謝 –

+0

我結束了使用你的建議,因爲我也有額外的排序。 –

+0

@DanielSousa:如果相關表格可能很大,那麼使用[活動記錄組方法](http://guides.rubyonrails.org/)也可以更有效地執行數據庫中的「group by」操作active_record_querying.html#group) – user000001