Может быть, что-то вроде этого
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 для получения дополнительной информации.