2011-01-22 11 views
2

私は場所やカテゴリに属する​​いくつかの投稿を持っています.Craigslistのようなものです。Rails:scope order question

最近投稿された順に並べ替え、ユーザーが指定した場所とカテゴリでフィルタしたいと思います。

誰かがこれを行う方法の例/ヒントを与えることはできますか?

答えて

4

Rails 3では、注文、雑音などを一緒に変更することができます。 ASCICasts on activerecord queries in Rails3

query = Post.order("published_at desc") 
query = query.where("location_id = ?", params[:location_id]) unless params[:location_id].blank? 
query = query.where("category_id = ?", params[:category_id]) unless params[:category_id].blank? 
@posts = query.all 
+1

どのようにlocation_idを指定できますか? – SuperString

+0

投稿もhas_manyタグ。たとえば、投稿にはjavaタグとcssタグがあります。 javaタグだけですべての投稿をフィルタリングしたい場合があります。または、javaタグとcssタグの両方を持つ投稿。それ、どうやったら出来るの? – SuperString

+0

私のコードの2行目は、location_idを指定しています。 ORクエリの実行方法については、2番目の質問を検索または開く必要があります。 –

0

カテゴリと場所を投稿に並べ替えるために使用するフィールドをキャッシュすることができます。

before_save: cache_sortables 

def cache_sortables 
    self.category_title = self.category.title if self.category? 
    self.location_title = self.location.title if self.location? 
end 

Post.find(:all, :order => 'location_title, category_title, created_at') 

親カテゴリ/位置のタイトルが変更されたときに投稿を更新することは、読者の練習として残されています。