未定义的方法“平均”

Posted

技术标签:

【中文标题】未定义的方法“平均”【英文标题】:Undefined method `average' 【发布时间】:2015-11-30 21:41:43 【问题描述】:

我正在尝试使用 raty.js 在我的 rails 应用程序中计算电影对象的平均星级。这是我的代码的 sn-p:

控制器/movies_controller.rb

def show
  @avg_review = @movie.average(:rating)
end

private
def set_movie
  @movie = Movie.find(params[:id])
end

schema.rb

create_table "movies", force: true do |t|
  t.integer  "user_id"
  t.string   "title"
  t.text     "description"
  t.integer  "image_id"
  t.string   "director"
  t.float    "rating"
  t.integer  "num_ratings"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.text     "url"
  t.string   "tracking"
end

我不断收到错误:

undefined method `average' for #<.Movie:0x5b385d0>

据我了解,这是 Rails 中的 a predefined method。然而,我得到了错误。有人可以帮我吗?

【问题讨论】:

你能发布完整的错误吗? 【参考方案1】:

从您引用的文档中,average 应该在 Movie 模型本身上调用,而不是它的实例。

这将返回列的平均值。

@avg_review = Movie.average(:rating)

你也可以在查询中添加条件(我做了一列用于演示):

# Get average of movie ratings from 2015
@avg_review = Movie.average(:rating).where(year: '2015')

【讨论】:

谢谢,这解决了我的问题:)【参考方案2】:

根据average 方法文档。这是ActiveRecord::Calculations 的一种方法,因此您应该在ActiveRecord 集合或模型上直接使用它,但您尝试在实例上使用它:

错误:

@avg_review = @movie.average(:rating)

右:

@avg_review = Movie.average(:rating)

【讨论】:

以上是关于未定义的方法“平均”的主要内容,如果未能解决你的问题,请参考以下文章

自定义指标未显示在 New Relic

Python 类继承 - 均值,错误:未定义均值

TypeError:“digest”参数是必需的,不能未定义

goland出现未定义Gotoot解决方法

如何像未定义的函数一样传递未定义的方法

jni报错日志打印方法未定义