我有一个用户谁可以张贴主题和留下评论。我让他们的默认作用域按日期返回。
我想在这里按日期向所有用户展示主题和评论。
示例:
将成为:
做这件事最好的方法是什么?除:
@variable = user.comments + user.topics
@variable.sort_by &:created_at
@variable.reverse!发布于 2014-10-14 13:58:31
我在这里看到了两种选择。一个是编写纯SQL,它看起来比“三行解决方案”要难看得多。另一种方法是创建一个新的AR模型,如
class UserForumActivities < ActiveRecord::Base
self.table_name='user_forum_activities' # this is a name of psql view
end看上去就像
class CreateSomeView < ActiveRecord::Migration
def self.up
execute %q{
CREATE OR REPLACE VIEW user_forum_activities AS
SELECT "comments.desired_fields", "topics.desired_fields"
FROM "comments", "topics"
INNER JOIN "users" ON "foreign_keys"
WHERE "appriopriate conditions if needed"
ORDER BY created_at;
}
end
end然后,在您的控制器中,您可以像这样使用它:
@variable = UserForumActivities.scoped_to_user_with_id(user.id)因此,我们得到一行而不是三行,您可以让数据库为您处理逻辑(db通常比Ruby更快)。希望这会有所帮助,我也很好奇是否有人有更好的解决方案:-)
发布于 2014-10-14 14:00:29
这可以像活动流一样得到解决。您可以创建一个名为activity的独立模型,并与其他实体建立关系。当用户做一些事情,比如添加新注释或新主题时,它也应该保存在活动中。活动应该有这些模型的外键(主题、注释、.)好让他们稍后再来。最后,只需对活动进行排序并加载对象(主题、注释、..)然后表现出来。
有一个很好的教程,说明了如何做到这一点,但不幸的是,它不是免费的:http://railscasts.com/episodes/407-activity-feed-from-scratch
还有一个很好的创业板public_activity可以解决这个问题。有一个教程,如何做到这一点(免费的):http://railscasts.com/episodes/406-public-activity?view=asciicast
https://stackoverflow.com/questions/26362038
复制相似问题