2009-07-11 6 views
0

J'écris actuellement une application qui tire tous les tweets de Twitter avec des liens en eux et les met dans notre base de données interrogeable.Quelles associations dois-je utiliser pour pouvoir trier les résultats de recherche par modèle associé dans une application rails?

Nos tables de base de données ressemblent à ceci:

 
Tweets 
    content 
    tweet_id 

Links 
    url 
    title 
    count 

User 
    username 
    user_image 

Nous aimerions être en mesure de rechercher dans la colonne de tweet.content pour un terme de recherche et ont les résultats ordonnés par le link.count

Quelle est la meilleure façon de configurer les associations de modèles pour y parvenir? Et quelle est la meilleure façon d'effectuer la recherche? J'ai regardé dans acts_as_ferret, mais je ne sais pas comment je trierais les résultats.

Merci, Daniel Erickson

Répondre

0

Peut-être quelque chose comme ça

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 

Cela n'a pas été testé, mais nous espérons que vous pouvez maintenant faire

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

tout à fait possible de mieux (plus rapide) Le moyen de le faire est d'implémenter un counter_cache. Rails vous permet d'avoir un compte dans la table des tweets qui reflète le nombre d'objets associés de type X qu'il possède. Donc, vous vous ajoutez un links_count à votre table de tweets Rails devrait garder ce compteur à jour sur le nombre de liens que tweet a. Cela rendra la requête plus facile et plus rapide. Jetez un oeil à this Railcast pour plus d'informations.

Questions connexes