【问题标题】:how to create a simple activity stream?如何创建一个简单的活动流?
【发布时间】:2011-12-04 20:02:42
【问题描述】:

我正在尝试实现一个简单的活动流。

Given that User abc creates a post 123
And User xyz comments on 123.  
Then user abc's activity stream should look something like:
<ul>
  <li>User <a href="/users/abc">abc</a> created a post <a href="/users/abc/posts/123">123</a></li>
  <li>User <a href="/users/xyz">xyz</a> commented on post <a href="/users/abc/posts/123">123</a></li>
</ul>

我更喜欢填充活动模型(而不是控制器中的多个查询)。我在帖子和 cmets 模型中添加了一个“after_create”钩子来填充活动:

class Post < ActiveRecord
  after_create do
    ActivityCreate(:user_id => self.user_id, :description => "created a post")
  end
end

我想存储创建路线和链接所需的特殊字段,例如 post_id 等,但我以后可能有更多想要跟踪的活动,喜欢、不喜欢、收藏夹等,我想要一个灵活的创建活动描述的方式。

所以我的问题是,将 link_to 放入活动描述的有效方法是什么?是否有任何 c 样式的 printf 方式列出稍后评估的助手?

有点像这样:

description = ["用户?评论了帖子?",user_path(User.find(self.user_id)),post_path(Post.find(self.id))]

然后在模板端评估这个?

【问题讨论】:

  • 让模型知道有关链接和路由的任何信息可能是个坏主意。
  • 同意,也许活动可以更好地处理为多态关联...

标签: ruby-on-rails-3 model render helper


【解决方案1】:

这是我第一次联想到你的案子。也许它足够激励你:)

class Activity < ActiveRecord::Base
  #this might be a comment or a post or something else
  belongs_to :changed_item, :polymorphic => true
  #who did it?
  belongs_to :user
  #what did he do?
  validates_presence_of :changes

  def msg
    #do fancy text generation
    if changes.new_record
      "#{user.name} created a #{changed_item.class}"
    else
      "#{user.name} changed #{changes.length} attributes of the #{changed_item.class} #{changed_item.title}"
    end
  end

  def initialize(model, user)
    #fetch changes and remember user and changed model
    self.changed_item = model
    self.user = user
    self.changes << model.changed_attributes.merge({:new_record => model.new_record?})
  end
end

class Post < ActiveRecord::Base
  after_save do
    #remember who to be blamed
    Activity.create(self, current_user)
  end
end

class User < ActiveRecord::Base
  #the users activities
  has_many :activities
end

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 2013-03-28
  • 1970-01-01
相关资源
最近更新 更多