Rails 3 - 在model.save之后修改其他模型的属性

时间:2012-06-04 16:41:48

标签: ruby-on-rails ruby-on-rails-3 model attr after-save

不幸的是,我可能仍然是一个Rails初学者,所以,即使我想到并尝试了不同的方法,我没有按照我想要的方式工作,现在不得不再次寻求帮助。

我有一个REST评论投票机制,每个评论都竖起大拇指。这很好用,每个都用counter_cache来处理。现在,基于这些拇指向上和向下投票,我想为每个评论计算一个加号值,thumb_up-votes - thumbs_down-votes。虽然我不确定它是否是最有效的处理方式,但我计划将正负值作为注释模型的额外整数属性(而拇指向上和向下都是自己的模型)。所以,我基本上想要的是,当保存thumbs_up时,注释的plusminus attr应自动为+= 1,并且分别为thumbs_down.save a -= 1

如何从thumbs_up控制器中发出此类操作?我是否需要修改我的form_for或者我的方法是完全错误的?

是否有一个after_save回调来处理不同模型的属性?

2 个答案:

答案 0 :(得分:1)

从您所提供的内容来看,很难说清楚。但我要说的是,如果你需要发表评论""竖起大拇指"并且"大拇指向下"独立地将它们存储为Comment模型的字段。然后,只需在评论模型中创建一个帮助方法即可获得评论的评分:

   def rating
      thumbs_up - thumbs_down
   end

修改: 有了你的新评论,我仍然会说帮助方法而不是字段。

   #models/comment.rb
   def rating
      thumbs_up.all.length - thumbs_down.all.length #or whatever way you want to do this
   end

答案 1 :(得分:1)

如果您不想将两个不同的模型与实际上不属于这两个模型的辅助方法混合,您可以使用观察者http://api.rubyonrails.org/classes/ActiveRecord/Observer.html

您的观察者将观看一个模型并做一些事情