Ruby on rails RubyonRails 4.2.3计算平均值

Ruby on rails RubyonRails 4.2.3计算平均值,ruby-on-rails,ruby,Ruby On Rails,Ruby,我是初级RoR程序员。 我知道Ruby语言有一个计算方法,当我在rails控制台中键入它时:ModelName.average(:something),它从字段:something计算平均值。它可以工作,但是如何为视图添加平均值 我有一份商品目录。每个项目都有一个评审,其中包括评分(整数) 如何在视图(即show.html.erb)上显示审查模型中所有评级字段的平均值?有多种方法。最简单的方法是将其作为控制器上的状态公开,即@average,然后可以在视图中访问它。尽管可能很简单,但我不推荐这种

我是初级RoR程序员。 我知道Ruby语言有一个计算方法,当我在rails控制台中键入它时:
ModelName.average(:something)
,它从字段
:something
计算平均值。它可以工作,但是如何为视图添加平均值

我有一份商品目录。每个项目都有一个评审,其中包括评分(整数)


如何在视图(即show.html.erb)上显示审查模型中所有评级字段的平均值?

有多种方法。最简单的方法是将其作为控制器上的状态公开,即
@average
,然后可以在视图中访问它。尽管可能很简单,但我不推荐这种方法

我的建议是,在模型上添加一个方法,
model\u instance#review\u average
当您在视图中显示控制器的
\show
操作中的模型实例时(使用
@model\u instance
),您可以调用
@model\u instance.review\u average

第二种方法的优点是什么?它对视图和控制器隐藏逻辑,并将其推送到模型中,从而使编写自动化测试用例变得更容易

要实现平均值,请检查:

我也猜你有很多亲戚。做上述工作应该不会太难


您还必须注意的一件事是n+1查询,但只有当您必须在索引页中显示平均值时,这才成为一个问题。

只需将以下内容添加到show.html.erb中即可:

<%= @model.average_rating %>

逐步解决:

第一步:添加到模型控制器,以显示:
@rating=Model.where(:Model_id=>params[:id])。average(:attribute)。to_i

第二步:添加到模型视图以显示.html.erb:

model\u id
=您的型号,即Post将
:Post\u id
:属性
=您的属性,即:评级


就这些。

这是将值从控制器传递到视图的问题吗?在这种情况下如何配置控制器,以及如何将平均值传递到视图//def review\u avarage@review=review.average(:rating)end//和show view???通常我会做的是,
def show@review=review.find(:id)end
app/views/reviews/show.html.erb
Average:
@FilipMaryniak我认为@bsvin33t的建议是在您的审阅模型上添加一个方法,然后在视图中调用该方法。在您的情况下,在
app/views/reviews
中定义:
def average\u rating Review.average(:rating)end
,在
app/views/reviews
中,您将拥有
。此外,如果每个项目都有一个评审(并且假设您已经正确设置了关联),您将能够通过
app/views/items/show.html.erb
中的
@item.review.average\u rating
访问它的评分。未定义的方法“average\u rating”用于nil:NilClass仍然是我所做的一切:“未定义的方法‘average\u rating’用于nil:NilClass”您是否在模型中定义了“平均评分”方法?另外,它可能与您试图平均的数据类型有关(可能您正在处理字符串?),在您的模型中,定义一个方法
def average\u rating model.average(:rating)。结束
这个错误肯定会让我认为您在模型中没有正确定义方法。我在controller
def@rating=model.average(:rating)end
中定义,并在视图中定义了
。它工作,但它显示了一个奇怪的数字。起初,我的产品没有任何评级,但控制器显示,即11.404040(?)。第二,我认为,我的方法从属于模型的所有项目计算所有评分,而不是从一个项目计算。但这并不能解决第一个问题,因为如果我只有一个项目,它也会显示一个奇怪的数字。有什么想法吗?感谢所有回复。所以,我正在创建目录,目录中的每个项目都有用户评分的评论,我想计算一个项目评论的平均评分。