Heroku,Ordering Array中的未定义方法错误

时间:2016-02-29 01:57:55

标签: ruby-on-rails ruby 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>):

2 个答案:

答案 0 :(得分:1)

此处group_by方法会将您的ActiveRecord Relation object转换为Hash(至少在postgresql上),并且order没有Hash方法是你错误的原因。

如果本地和制作人员对此错误有所不同,可能是因为您在它们之间使用了不同的数据库类型。

答案 1 :(得分:-1)

因此,all强制将SQL结果解析为Ruby数组,group_by将该数组转换为Hash。因此,调用order并不合理。

如果删除all,则应ActiveRecord尝试解析SQL中的所有内容。