Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在关联模型的“”处创建的订单_Ruby On Rails_Postgresql - Fatal编程技术网

Ruby on rails 在关联模型的“”处创建的订单

Ruby on rails 在关联模型的“”处创建的订单,ruby-on-rails,postgresql,Ruby On Rails,Postgresql,我正在用Rails制作一个非常简单的论坛(更多的是为了体验,而不是实际生成可用于生产的代码),我想知道如何实现一个公共特性 在topics_controller的索引中,如果我执行以下操作,最新的主题将位于主题列表的顶部 主题\u controller.rb def index @topics = Topic.all.order("created_at DESC") end 不过,我希望能按他们最近的帖子来排序。当用户创建一个新主题时,他们需要为该主题创建第一篇文章,因此,如果我能找出如何

我正在用Rails制作一个非常简单的论坛(更多的是为了体验,而不是实际生成可用于生产的代码),我想知道如何实现一个公共特性

在topics_controller的索引中,如果我执行以下操作,最新的主题将位于主题列表的顶部

主题\u controller.rb

def index

@topics = Topic.all.order("created_at DESC")

end
不过,我希望能按他们最近的帖子来排序。当用户创建一个新主题时,他们需要为该主题创建第一篇文章,因此,如果我能找出如何按最近创建的文章排序主题,那么这将解决所有问题。例如,如果“昨天的主题”刚刚添加了一篇新帖子,那么昨天创建的主题(“昨天的主题”)可能仍然位于今天创建的主题(“今天的主题”)之上

在模型中

Topic.rb
has_many :posts

Post.rb

belongs_to :topic

注意,我确信在Rails中有一种方法可以做到这一点,但由于我确信在数据库中进行排序更快,我想知道是否有一种方法可以在数据库中进行排序。但是,如果您只知道Rails解决方案,那就可以了。

将您的关联更新为

belongs_to :topic, touch: true
然后,每一篇新帖子都会更新相关主题的
更新内容

引自:

如果将
:触按
选项设置为
true
,则每当保存或销毁此对象时,关联对象上的
更新时间戳将设置为当前时间


由于主题似乎不太可编辑且大部分可读,因此将touch:true添加到post->topic关联中会更容易。在这种情况下,rails将在每一个获得新帖子的主题上进行更新。在这之后,只需使用Topic.order(更新的_at::desc)获取最新信息-昨天的主题和今天的新鲜评论将位于今天的主题之前。 另一种方法是将文章与主题连接起来,按照在创建的max post进行分组和排序。不过速度会慢一些。
另外,别忘了分页-主题。这并不是一件好事,也许你知道这一点,但以防万一

谢谢。那很容易。然而,为了让所有阅读此答案的人都清楚,我现在通过更新的
@topics=Topic.all.order(“updated_at DESC”)
进行排序,这确实是一种非常糟糕的方式。任何时候更新一个主题,例如重命名它,它都会弹出到列表的顶部。对于downvoter:我同意这会导致父对象更新,并且可能会影响应用程序的性能。但是:这是由推荐的,当您想要使用俄罗斯玩偶缓存策略时,这是必不可少的。