2016-02-29 20 views
0

我想按降序排列一個數組,但Heroku推回一個錯誤,聲稱我有一個未定義的方法。Heroku中的未定義方法錯誤,排序陣列

我的控制器代碼目前看起來像這樣。

def by_year_and_month 
@bets_by_year = Bet.where("EXTRACT(YEAR FROM created_at) = ?", params[:year]) 
@bets_by_month = @bets_by_year.where("EXTRACT(MONTH FROM created_at) = ?", params[:month]) 
@bets_by_month = @bets_by_month.all.group_by { |bet| bet.created_at.beginning_of_month } 
@bets_by_month = @bets_by_month.order("created_at") 


end 

不幸的是最後一行產生了一個錯誤。

Heroku日誌當前顯示此錯誤,當我加載頁面。

NoMethodError (undefined method `order' for #<Hash:0x007f183dd33068>): 

回答

1

group_by方法在這裏轉換您的ActiveRecord Relation objectHash(至少在PostgreSQL上它),而且是Hash沒有order方法,它是你錯誤的原因。

如果你本地和生產的這個錯誤不同,這可能是因爲你在他們之間使用不同的數據庫類型。

-1

所以,SQL的all軍隊的決議結果爲Ruby的數組和group_by轉換數組到一個哈希。因此,撥打order沒有意義。

如果您刪除all,應該使ActiveRecord嘗試解決SQL中的所有問題。

+0

但是'group_by'仍然是'Enumerable#group_by'而沒有'all'。 –

+0

'group'是'Enumerable'中'ActiveRelation'到'group_by'的同義詞方法。 –

+0

ActiveRecord不知道'group_by'是什麼。 ActiveRecord的「group」與「Enumerable#group_by」非常不同。無論如何,AR將無法將數據塊發送到GROUP BY數據庫。 –