我有一个有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'
我该如何解决?