编辑: 实际上我只是决定反对我的rebloging方式,而是决定通过复制并从文章中创建一个全新的记录来实现它,然后添加一个last:true列。在我看来,它在逻辑上有点清晰,它避免了下面列出的所有问题。
在博客应用程序中,我实现了通过带有两个外键的连接reblog模型来重新登录其他人博客文章的可能性。
在我的博客展示动作中,我将blog.articles与blog.reblogged_articles一起添加到一个单独的文章数组中。然后,我按每个元素的created_at属性对此数组进行排序。
但是,对于这篇文章,我更愿意使用他们的reblog连接模型的created_at属性,以便最初的文章最初出现在博客的顶部。一篇文章应该总是在博客中找到它的位置,好像它是由博客的所有者创建的。但目前,如果文章是在3年前创建的,那么一篇文章可能会出现在博客的底部。
在将两个数组放在一起之前,我可能需要修改my_articles数组的created_at属性。但是我该怎么做?
编辑: 只是一个澄清的例子:
博客ID 1:
文章ID 1,created_at:一年前。
文章ID 2,created_at:一个月前。
文章ID 3,created_at:一周前
文章ID 4,created_at:一天前。
博客ID 2:
文章编号5,created_at:前一天。
文章编号6,created_at:一小时前。
文章编号7,created_at:30分钟前
文章编号8,created_at:大约10分钟前。
现在,博客2重新登录博客1的第1条。 我希望这篇文章能够显示在Blog 2的顶部,就好像它刚刚创建一样。但是,由于该文章实际上是在一年前创建的,因此它将显示在Blog 2的底部。我怎样才能解决这个问题?
根据连接模型Reblog的created_at而不是文章本身的created_at,将文章置于“正确”位置的最聪明方法是什么?
答案 0 :(得分:0)
最简单的解决方案可能只是在文章模型中添加last_activity_date列。每当发布文章时,请更新相应文章的last_activity_date。然后,当您收到文章时,Article.order(:last_activity_date => 'DESC')
编辑:根据您的澄清 -
# Merge arrays of article objects
all_articles = current_blog_articles | reblogged_articles
all_articles.sort_by! {|x| -x.created_at } # Sort by created_at descending