Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按非';不要总是在场–;ActiveRecord | Rails 5_Ruby On Rails_Ruby_Activerecord - Fatal编程技术网

Ruby on rails 按非';不要总是在场–;ActiveRecord | Rails 5

Ruby on rails 按非';不要总是在场–;ActiveRecord | Rails 5,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我在一个上市网站上工作,该网站与位置和查看模型一起工作。我能够根据位置的任何评论计算出的平均评分来排列位置列表 Location.all.sort\u by(&:rating) 抛出错误: An ArgumentError occurred in search#search: comparison of BigDecimal with nil failed 请注意,rating是一种模型方法,而不是数据库中的字段,因此使用了sort\u by 我应该如何进行最佳修改以使其正常运行? 任

我在一个上市网站上工作,该网站与
位置
查看
模型一起工作。我能够根据位置的任何评论计算出的平均评分来排列位置列表

Location.all.sort\u by(&:rating)
抛出错误:

An ArgumentError occurred in search#search:

  comparison of BigDecimal with nil failed
请注意,
rating
是一种模型方法,而不是数据库中的字段,因此使用了
sort\u by

我应该如何进行最佳修改以使其正常运行?
任何帮助都将不胜感激

类位置
class Review
例如,如果没有可用的审阅,您可以返回0:

  def rating
    return 0 unless reviews.any?
    reviews.average(:rating)
  end

为了避免覆盖您的
评级
方法(如果没有评论,您可能希望它返回
nil
),您可以使用以下方法:

Location.all.sort_by { |l| l.rating || 0 }
这将允许没有评级的任何位置仅在未获得评级的情况下,在订单中退回到默认值
0

然后,例如,您仍然可以区分真实审核分数为
0
的地点和没有任何审核的地点

如果您担心
0
的真实分数与未审核的分数冲突,您可以将默认分数设置得更低,即
-1

例如,您可能需要在某个地方显示审核分数,如下所示:

= @location.rating || "Location has no reviews"

average
如果没有
审核,则返回
nil
。要解决这个问题,您可以排除没有评论的位置,单独对它们进行排序,或者提供默认评级。哎哟,从性能的角度来看,这会造成伤害,因为您必须一次加载每个
位置的评论