2009-07-11 5 views
0

私は現在、Twitterのすべてのつぶやきをリンクに入れて検索可能なデータベースに入れているアプリを書いています。レールアプリケーションの関連モデルによって検索結果を並べ替えるには、どのような関連付けを使用する必要がありますか?

当社のデータベーステーブルは、次のようになります。

 
Tweets 
    content 
    tweet_id 

Links 
    url 
    title 
    count 

User 
    username 
    user_image 

我々は検索語のためtweet.content列を検索できるようにしたいとの結果がlink.count

順必要があるだろう

これを達成するためにモデルの関連付けを設定する最良の方法は何ですか?検索を実行する最良の方法は何ですか?私はacts_as_ferretを調べましたが、どのように結果を並べ替えるのか分かりません。

おかげで、 ダニエル・エリクソン

答えて

0

たぶんこれはテストされていないが、うまくいけば、あなたが今できること

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は、そのツイートが持つリンクの数を最新の状態に保つ必要があります。これにより、クエリがより簡単かつ迅速になります。詳細はthis Railcastをご覧ください。

関連する問題