insert在以created_at命令的blog.articles数组中的正确位置插入文章

时间:2012-10-24 21:46:13

标签: ruby-on-rails ruby ruby-on-rails-3 sorting virtual-attribute

编辑: 实际上我只是决定反对我的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,将文章置于“正确”位置的最聪明方法是什么?

1 个答案:

答案 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