如何创建一个简单的活动流?
我想实现一个简单的活动流。如何创建一个简单的活动流?
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="https://stackoverflow.com/users/abc">abc</a> created a post <a href="https://stackoverflow.com/users/abc/posts/123">123</a></li>
<li>User <a href="https://stackoverflow.com/users/xyz">xyz</a> commented on post <a href="https://stackoverflow.com/users/abc/posts/123">123</a></li>
</ul>
我更喜欢填充活动模型(而不是控制器中的多个查询)。我添加了一个“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方式列表助手以后评估?
排序的是这样的:
描述= [ “?用户评论交?”,user_path(User.find(self.user_id)),post_path(Post.find(self.id))]
然后在模板方面评估这个?
这是我第一次关于你的情况。也许它启发你足够:)
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
只是好奇 - 在用户模型中,它应该是has_many':Activities'或has_many':活动'或轨道以某种方式知道区别? – dsignr
你的意思是单数/复数?请参阅http://4loc.wordpress.com/2009/04/09/inflector-rails-pluralization/或http://edgeguides.rubyonrails.org/i18n.html#pluralization – abstraktor
非常感谢! – dsignr
模型知道任何关于链接和路由可能是一个坏主意。 –
同意,也许活动可以更好地处理为多态关联... – Homan