2013-04-11 36 views
0

我有一个用户模型,has_many :comments和一个评论模型,belongs_to :userafter_save更新belongs_to模型

我想收集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,但它从来没有经过,因此我假设该行是问题。然而,再次检查轨道控制台,我看到它在那里工作。我不明白!

已解答:下面是我如何解决问题,虽然我不喜欢它。我删除了after_save回调,并在用户模型中添加了一个方法来计算自己的评分,并在控制器中调用它。

+0

我猜你是不是节省了用户的对象。在末尾输入'user.save' – Zippie 2013-04-11 16:01:14

+0

我添加了它,但仍没有改变。它是有道理的,但谢谢。 – eytanfb 2013-04-11 16:14:43

+0

你可以试试'user.save!',如果保存有问题就会出错 – Zippie 2013-04-11 16:18:43

回答

0

也许你的update_user_rating被调用,但该方法中的某一行失败。

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

+1

大概应该是'user = User.find(self.user_id)',虽然我不知道'self.is_about'的含义是什么,也不包含 – Zippie 2013-04-11 16:48:17

+0

啊,我错过了这个部分,这是回复评论而不是用户 – Huy 2013-04-11 16:49:08

+0

user_id是评论的所有者,而is_about是它关于哪个用户 – eytanfb 2013-04-13 07:27:17