Какие ассоциации я должен использовать, чтобы иметь возможность сортировать результаты поиска по связанной модели в приложении rails? - PullRequest
0 голосов
/ 11 июля 2009

В настоящее время я пишу приложение, которое извлекает все твиты из твиттера со ссылками на них и помещает их в нашу базу данных с возможностью поиска.

Таблицы нашей базы данных выглядят так:

Tweets
  content
  tweet_id

Links
  url
  title
  count

User
  username
  user_image

Мы хотели бы иметь возможность поиска по столбцу tweet.content для поискового запроса и упорядочить результаты по ссылке.count

Каков наилучший способ создания ассоциаций моделей для достижения этой цели? И как лучше всего выполнить поиск? Я посмотрел на actions_as_ferret, но не знаю, как отсортировать результаты.

Спасибо, Дэниэл Эриксон

1 Ответ

0 голосов
/ 11 июля 2009

Может быть, что-то вроде этого

class Tweets < ActiveRecord::Base
  named_scope :order_by_number_of_links,
    :joins => "LEFT OUTER JOIN links ON(tweets.id = links.tweet_id)"
    :group => "tweets.id"
    :order => "count(links.id) DESC"
end

Это не было проверено, но, надеюсь, теперь вы можете сделать

Tweets.all(
  :conditions => ["content LIKE ?", params[:query]]
).order_by_number_of_links

Вполне возможно, лучший (более быстрый) способ сделать это - реализовать counter_cache. Rails позволяет вам иметь счет в таблице твитов, который отражает количество связанных объектов типа X. Таким образом, вы добавляете links_count в свою таблицу твитов. Rails должен держать этот счетчик в актуальном состоянии, сколько ссылок имеет этот твит. Это сделает запрос проще и быстрее. Посмотрите на этот Railcast для получения дополнительной информации.

...