Как лучше всего оценивать модели в рельсах? - PullRequest
1 голос
/ 12 апреля 2011

Допустим, у меня есть Posts и Comments для приложения блога, использующего Rails и MySQL.

Я хочу оценивать сообщения по количеству комментариев. (Примечание: не просто сортировать, но и получать их 1-й, 2-й, 3-й ранг).

Кроме того, учитывая сообщение, я хочу получить его звание, не загружая все сообщения в Rails и не просматривая их.

например. «Это сообщение заняло 372 место по количеству комментариев»

Наконец, если два поста имеют одинаковое количество комментариев, они должны иметь одинаковый ранг - так что связи в порядке.

Мне показалось, что в MySQL есть некоторые умные решения, такие как этот пост: Как обрабатывать связи при ранжировании результатов в MySQL?

Мне интересно, есть ли более простое решение путем нормализации некоторых данных в дополнительном поле таблицы сообщений.

Кто-нибудь видел хороший подход к этому?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2011

Думая об этом больше, я думаю, что есть несколько разных способов добавить эту функциональность.

Вы можете либо добавить Redis в микс и использовать его функциональность отсортированного набора, как в примере с лучшим результатомpost, http://jimneath.org/2011/03/24/using-redis-with-ruby-on-rails.html

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

Другой способ - создать модель PostRanking, которая записывает post_id и количество комментариев.Вы можете установить область действия по умолчанию, чтобы отсортировать по количеству комментариев в порядке убывания и легко запрашивать.

0 голосов
/ 21 сентября 2012

Эта проблема выглядит идентично примеру, приведенному для опции ассоциации :counter_cache.

Посмотрите.

...