0

Railscast111で説明されているように、フィルターに基づいて投稿を返す検索リソースがあり、次のコードがあります。

def filter_posts
  posts = Post.order('created_at DESC')     
  posts = posts.where("name ilike ?", "%#{keywords}%")
  posts = posts.where(... #numerous other filters
  posts
end

フィルター自体は問題ないようです。ただし、必ず「created_at DESC」の順に内容が返されるとは限りません。常に「created_at DESC」の順序になるように最終出力をソートするにはどうすればよいですか? 現在、投稿モデルと検索モデルの間に関連付けはありません。ビルドする必要がありますか? もしそうなら、どのように?

4

1 に答える 1

1

2 つの条件を一緒に連鎖させてみましたか?

posts = Post.where("name like?", "%#{keywords}%").order('created_at DESC')

最終的に呼び出すフィルターの数に応じて、元のスコープを調整するのではなく、新しいスコープを作成する場所を使用するたびに、(フィルターに基づいて) 更新されたスコープで元の結果を更新し続ける必要があります。 . 元のコードがこれを行うように、あなたは正しい道を進んでいるようです。

posts = Post.where("filter1")
posts = posts.where("filter2")

すべてのフィルターが適用された後に並べ替えを試みましたか?

posts = posts.order('created_at DESC')   

また

posts = posts.sort_by &:created_at

また、(少なくともこの場合は) 検索ロジックを Post モデル自体に保持できるように見える場合、検索リソースの意味がよくわかりません。明確にするか、モデルを投稿できますか?

于 2012-09-04T16:05:38.837 に答える