Как рассчитать и использовать последний обновленный объект в Ruby on Rails? - PullRequest
1 голос
/ 20 марта 2012

У меня есть Projelements, которые похожи на:

  • Milestone
  • Task
  • ... и т. Д. *

Каждый Projelement может иметь один или несколько встроенных Comments (благодаря Mongoid).

Я хочу, чтобы можно было легко сказать:

Дайте мне список Projelements, отсортированный по дате последнего обновления

Где last_updated для Projelement больше:

  • 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. Поэтому я могу вручную обновить this_projelement.updated_at всякий раз, когда добавляется Comment. Но дизайн кажется хрупким.

Также подумал о наличии отдельного атрибута (например, last_updated_at), чтобы существующая семантика updated_at не была нарушена. Но дизайн также кажется хрупким.

Каким был бы путь Rails?

1 Ответ

2 голосов
/ 20 марта 2012

В MongoDB нет решения для заказа по какому-либо встроенному полю документа.

В вашем случае решение сделать обратный вызов before_save в вашем комментарии и обновить атрибут в родительском документе представляется наиболее разумной техникой.

...