0

我有这样的模型:

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

每篇文章都有一个类别和一个作者。所以,我希望有可能在我的查询中按类别名称或作者姓名(而不是按 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 回答