0

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

控制器/movies_controller.rb

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

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

架构.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 中的预定义方法。然而,我得到了错误。有人能帮我吗?

4

2 回答 2

7

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

这将返回列的平均值。

@avg_review = Movie.average(:rating)

您还可以在查询中添加条件(出于演示目的,我编了一个列):

# Get average of movie ratings from 2015
@avg_review = Movie.average(:rating).where(year: '2015')
于 2015-09-04T16:56:42.853 回答
1

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

错误的:

@avg_review = @movie.average(:rating)

对:

@avg_review = Movie.average(:rating)
于 2015-09-04T16:57:02.593 回答