0

我有一个 User 模型has_many :comments和一个 Comment 模型belongs_to :user

我想聚集comment.ratings起来设置user.rating,所以我after_save在我的评论模型中有一个方法,我称之为。然而,这永远不会被调用。

这是方法:

def update_user_rating
  user = User.find(self.is_about)
  user.trip_rating = (Comment.find_all_by_is_about(self.is_about).collect { |comment| comment.rating }.sum) / 
    Comment.find_all_by_is_about(self.is_about).count
end

我检查了 ruby​​ 代码,它可以在控制台上运行,所以我认为它不是 ruby​​ 代码。

是的,我在模型中也有 after_save :update_user_rating。

我想了解我做错了什么?

编辑:基于调试器,我看到 user.trip_rating= 的第一部分永远不会执行。意思是我试图next在那条线上做,但它从未通过,所以我假设那条线是问题所在。但是再次检查rails控制台,我看到它在那里工作。我不明白!

已解决:尽管我不喜欢它,但这是我解决问题的方法。我删除了 after_save 回调并向用户模型添加了一个方法来计算它自己的评级,并在控制器中调用它。

4

1 回答 1

0

也许您update_user_rating正在被调用,但是方法中的某些行失败了。

尝试 user = User.find(self.user_id)user = User.find_by_is_about(self.is_about)

于 2013-04-11T16:39:40.347 回答