0

我正在为类似于 Twitter 的客户端实现一个活动提要(它是唯一与当前登录用户相关的活动——即喜欢他/她的帖子、提及等的人)。它不会依赖于' push' 但相反,用户必须刷新页面才能看到新的活动(现在)。

在过去的一个小时里,我一直在搜索和搜索 SO,以找到实现这一点的最佳方法,并且观察者不断提出解决方案。我还注意到其中许多都在使用推送通知。我注意到 R Bates 在他的公共活动 railscast btw 中采用的方法,这就是我问这个问题的原因。

如果我不想使用推送通知怎么办,回调会好还是更好?你认为我仍然需要在 Rails 之外实现其他东西来实现可扩展性吗?(例如您如何使用“Pushapp”进行推送通知)

任何关于更好解决方案或光棚的建议都会有所帮助。


这是给@gg_s

我假设在这种情况下你说我有一个 activity_feed 表(receiver_id、sender_id、activity_type 和 activity_id)(属于用户,belongs_to activity_type (???),:polymorphic => true)

# application_controller.rb

def publish_to_user_feed(message)
  current_user.activity_feed << message
end

# favorites_controller.rb

def create
  # blah blah blah
  publish_to_user_feed "This just happened."
end

在收藏夹控制器的“创建”操作中,“这刚刚发生”可以 =="@favorite.user just favorited @favorite.post by @favorite.post.user"

再说一次,我希望我不会太讨厌并且很确定我的要求是显而易见的,但我认为这将有助于为我解决问题并帮助未来的访客。

再次感谢


对于任何想知道的人,我仍在努力解决这个问题.. 只是休息了一下.. 我主要担心的是它对数据库和其他性能问题的影响有多大,所以如果有人想改进这个(使用上面的代码),随意:)


解决方案:我不想让事情变得过于复杂,所以我正在接受 ap 的建议。

4

1 回答 1

1

两者都不使用。

在这种情况下,回调和观察者比您想象的要复杂得多。他们提供的唯一自动化是在模型事件上触发的能力。而已。您负责实施逻辑确定:

  • 刚才发生了什么?
  • 应该报告吗?
  • 报告什么?

扩展此逻辑以支持多种类型的活动是不必要的复杂。抛弃自动化并根据需要从控制器发布活动

创建一个辅助方法来保持干燥:

# application_controller.rb

def publish_to_user_feed(message)
  current_user.activity_feed << message
end

然后在必要时手动发布到用户的提要:

# some_controller.rb

def some_action
  # perform some action
  publish_to_user_feed "This just happened."
end

直接从控制器报告是清晰的、可读的、DRY 的、可维护的,并且符合 Rails 的 MVC 模式。无需编写复杂的回调链或观察者。

作为奖励,在不发布到活动源的情况下执行活动是微不足道的,例如管理活动或用户隐私设置。

于 2013-06-18T07:59:23.480 回答