如何在RubyonRails中计算和使用最新更新的对象



我有Projelements,它们类似于:

  • Milestone
  • Task
  • 。。。等等

每个Projelement可以具有一个或多个嵌入的Comments(得益于Mongoid)。

我想能够很容易地说:

给我一个Projelements的列表,按它们上次更新的时间排序

其中Projelementlast_updated是中的较大者

  • this_projelement.updated_at
  • if this_projelement.comments.count > 0 then this_projelement.comments.last.updated_at

我可以用上面的逻辑创建一个Projelement类方法last_updated_at

但我最终真正想做的是对我的Projelements进行查询,使用上面的逻辑检索最后更新的Projelement,就像使用属性进行查询一样。

以前,我尝试使用一种仅属性的方法:

尝试使用updated_at属性:如果更新Projelement的属性,则此时间戳会更新,但如果更新嵌入的Comments,则不会更新。因此,每当添加Comment时,我都可以手动更新this_projelement.updated_at。但设计感觉很脆弱。

还考虑有一个单独的属性(例如last_updated_at),这样updated_at的现有语义就不会被打乱。但设计也让人感觉脆弱。

Rails的方式是什么?

对于MongoDB,没有通过某些嵌入式文档字段进行订购的解决方案。

在您的案例中,在Comment中执行before_save回调并更新父文档中的属性的解决方案似乎是最合理的技术。

最新更新