我正在尝试按降序排序数组,但是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>):
答案 0 :(得分:1)
此处group_by
方法会将您的ActiveRecord Relation object
转换为Hash
(至少在postgresql上),并且order
没有Hash
方法是你错误的原因。
如果本地和制作人员对此错误有所不同,可能是因为您在它们之间使用了不同的数据库类型。
答案 1 :(得分:-1)
因此,all
强制将SQL结果解析为Ruby数组,group_by
将该数组转换为Hash。因此,调用order
并不合理。
如果删除all
,则应ActiveRecord
尝试解析SQL中的所有内容。