Cyr*_*rus 5 activerecord ruby-on-rails-3
我想在我的rails应用程序中根据最近的文章和评论创建一个活动源.它们是两种不同类型的activerecord(它们的表结构不同).
理想情况下,我可以创建一个混合的文章和评论数组,然后按相反的时间顺序显示它们.
所以,我可以弄清楚如何得到一个文章和评论的数组,然后将它们合并在一起并按created_at排序,但我很确定,一旦我开始使用分页,它将无法正常工作.
有没有办法创建一个像创建混合数组的东西?
对我来说其他问题之一是它可能是所有文章,它可能是所有评论或两者之间的某种组合.所以我不能只说我将接受最后15篇文章和最后15篇评论.
关于如何解决这个问题的任何想法?
当我通过使用非规范化模型或具有多态关联的类似物来管理它之前我已经完成了这个 - 这可以是你想要显示的任何类型的内容(帖子,评论,投票,喜欢,随你...).UserActivitybelongs_toActivitySource
然后,当创建要显示的任何实体时,您Observer将触发并在UserActivity表中创建一行,其中包含指向记录的链接.
然后,要显示列表,您只需UserActivity通过created_at降序查询排序,然后浏览多态activity_source关联以获取内容数据.然后,您需要在视图模板中使用一些智能来呈现评论和帖子以及其他不同的方式.
比如......
user_activity.rb:
class UserActivity < ActiveRecord::Base
belongs_to :activity_source, :polymorphic => true
# awesomeness continues here...
end
Run Code Online (Sandbox Code Playgroud)
comment.rb(post/whatever)
class Comment < ActiveRecord::Base
# comment awesomeness here...
end
Run Code Online (Sandbox Code Playgroud)
activity_source_observer.rb
class ActivitySourceObserver < ActiveRecord::Observer
observe :comment, :post
def after_create(activity_source)
UserActivity.create!(
:user => activity_source.user,
:activity_source_id => activity_source.id,
:activity_source_type => activity_source.class.to_s,
:created_at => activity_source.created_at,
:updated_at => activity_source.updated_at)
end
def before_destroy(activity_source)
UserActivity.destroy_all(:activity_source_id => activity_source.id)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |