Ruby on rails Heroku中未定义的方法错误,排序数组
我试图按降序排列数组,但Heroku将一个错误推回给我,声称我有一个未定义的方法 我的控制器代码当前看起来像这样Ruby on rails Heroku中未定义的方法错误,排序数组,ruby-on-rails,ruby,heroku,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]) @b
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>):
NoMethodError(未定义的#的'order'方法):
因此,all
强制将SQL结果解析为Ruby数组,并将该数组转换为哈希。因此,调用order
没有意义
如果您删除
all
,它应该使ActiveRecord
尝试解析SQL中的所有内容。这里的group\u by
方法将ActiveRecord关系对象
转换为Hash
(至少在postgresql上是这样)对于Hash
,没有order
方法,这是导致错误的原因
如果本地和生产在该错误上存在差异,很可能是因为它们之间使用了不同的db类型。但是
groupby
仍然是可枚举的
groupby没有all
,group
是ActiveRelation
中的同义词方法可枚举
。ActiveRecord不知道什么是分组依据
。ActiveRecord的组
与Enumerable#group_by
非常不同。AR无论如何都无法将块发送到数据库中,以便分组。