0

编辑:实际上我只是决定反对我的转发方式,而是决定通过复制并从文章中创建一个全新的记录来实现它,然后添加一个 reblogged: true 列。在我看来,逻辑上有点清晰,它避免了下面列出的所有问题。


在一个博客应用程序中,我实现了通过一个带有两个外键的加入转发模型来转发别人博客文章的可能性。

然后在我的博客展示操作中,我将带有 blog.reblogged_articles 的 blog.articles 添加到单个文章数组中。然后我按每个元素的 created_at 属性对该数组进行排序。

但是,对于转发的文章,我更愿意使用他们转发连接模型的 created_at 属性,以便转发的文章最初会出现在博客的顶部。转发的文章应始终在博客中获得其位置,就好像它是由博客所有者创建的一样。但目前,如果文章是在 3 年前创建的,则博客底部可能会出现重新博客的文章。

在将两个数组放在一起之前,我可能需要修改我的 reblogged_articles 数组的 created_at 属性。但是我该怎么做呢?

编辑:只是一个澄清的例子:

博客 id 1:
文章 id 1,created_at:一年前。
文章 id 2,created_at:一个月前。
文章 ID 3,created_at:一周前。
文章 id 4,created_at:一天前。

博客 id 2:
文章 id 5,created_at:一天前。
文章 id 6,created_at:一小时前。
文章 id 7,created_at:30 分钟前。
文章 id 8,created_at:大约 10 分钟前。

现在,博客 2 转发博客 1 的文章 1。我希望这篇文章显示在博客 2 的顶部,就好像它是刚刚创建的一样。但是,由于该文章实际上是在一年前创建的,它将显示在博客 2 的底部。我该如何解决这个问题?

根据连接模型 Reblog 的 created_at 而不是文章本身的 created_at 将重新记录的文章置于“正确”位置的最聪明的方法是什么?

4

1 回答 1

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
于 2012-10-24T22:45:26.267 回答