NoMethodError:nil的未定义方法`update_average_rating':NilClass

时间:2015-06-08 20:27:23

标签: ruby-on-rails heroku

我有一个有3个模型的铁路应用程序。

class User < ActiveRecord::Base
  has_many :ratings
end

class Movie < ActiveRecord::Base
  has_many :reviews
  accepts_nested_attributes_for :reviews

end

class Review < ActiveRecord::Base
belongs_to :movie
belongs_to :user
after_create :update_movie_rating
  def update_movie_rating
    movie.update_average_rating
  end
end

我正在尝试在创建每个评论后更新电影的平均评分。

以下是我在电影模型中使用的方法。

def update_average_rating(review=nil)
  s = self.reviews.sum(:rating)
  c = self.reviews.count
  self.update_attribute(:average_rating, c == 0 ? 0.0 : s / c.to_f)
end

此方法与评论模型中的after_create回调一起使用。

但是当我部署到heroku时,我得到这样的错误。我无法将post发送到部署在heroku上的应用程序。它背后的原因是什么? 我尝试使用管理面板(活动管理员)更新它时,我做对了。

NoMethodError (undefined method `update_average_rating' for nil:NilClass):
2015-06-08T20:09:06.297312+00:00 app[web.1]:   app/models/review.rb:6:in `update_movie_rating'
2015-06-08T20:09:06.297314+00:00 app[web.1]:   app/controllers/reviews_controller.rb:36:in `block in create'
2015-06-08T20:09:06.297315+00:00 app[web.1]:   app/controllers/reviews_controller.rb:35:in `create'

我该如何解决?

0 个答案:

没有答案