使用 acts_as_votable gem 时,如何在保存投票后执行操作?

When using the acts_as_votable gem, how do I perform an action after saving a vote?

我在我的 Rails 项目中使用 acts_as_votable gem 来允许经过身份验证的用户发布 up/downvote 个帖子。

每当用户进行投票时,都会使用事件记录服务 Mixpanel 记录投票事件。我想确保只有在保存投票时才提交投票事件。也就是说,如果用户已经投票,则不应再次记录该事件。

鉴于 acts_as_votable 是 gem,这种情况下的最佳做法是什么?我应该重新打开 class 还是 fork gem?

如果您认为需要扩展 acts_as_votable 的功能,更好的做法是重新打开 class(猴子补丁)。它将更易于维护 运行.

但最好的做法是远离 acts_as_votable 并修改您的日志记录代码。 acts_as_votable 有一个 vote_registered? 方法可以告诉您投票是否已保存,因此您的方法可能如下所示:

post.liked_by current_user
Mixpanel.submit 'new vote' if post.vote_registered?