0

私はこのようなモデルを持っています:

scope :search_posts, lambda { |query|
  mega_posts.where( "title LIKE ? OR category_id LIKE ? OR author_id LIKE ?", 
                    "%#{query}%",
                    "%#{query}%",
                    "%#{query}%"
  )
}

すべての投稿には、1 つのカテゴリと 1 人の作成者がいます。そのため、クエリで (ID ではなく) カテゴリ名または著者名で投稿を検索できるようにしたいと考えています。どうすればいいですか?ありがとう。

4

1 に答える 1

2

最も基本的な答えは、結合を行うことです。アソシエーションを適切に設定していれば、これはうまくいくはずです:

mega_posts.joins(:category).where("posts.title LIKE :query OR categories.name LIKE :query", :query => query)

編集:複数の関連付けられたモデルの場合。複数の結合を行うことができます:

mega_posts.joins(:category, :author).where('posts.title LIKE :query OR categories.name LIKE :query OR authors.name LIKE :query', :query => query)

結合をネストすることも可能です:

Category.joins(:posts => [:author])

または、Rails が容易にサポートするよりも複雑な場合に備えて、結合を自分で書き出すには:

Post.joins('left join categories as c on c.id = posts.category_id').where('c.name = ?', 'foo')

または、非常に複雑な検索を行う場合は、Sphinx や SOLR などの検索エンジンを調べることをお勧めします。

于 2012-04-03T20:56:54.033 に答える