0

rails アプリで、raty.js を使用して映画オブジェクトの平均星評価を計算しようとしています。これが私のコードのスニペットです:

コントローラー/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>

私の理解では、これはレールで事前定義されたメソッドです。それでも、エラーが発生します。誰かが私を助けることができますか?

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 に答える