Ruby on rails Rails:使用不同模型通过SQL进行搜索

Ruby on rails Rails:使用不同模型通过SQL进行搜索,ruby-on-rails,ruby-on-rails-3,search,Ruby On Rails,Ruby On Rails 3,Search,我有这样的模型: scope :search_posts, lambda { |query| mega_posts.where( "title LIKE ? OR category_id LIKE ? OR author_id LIKE ?", "%#{query}%", "%#{query}%", "%#{query}%" ) } 每个帖子都有一个类别和一个作者。

我有这样的模型:

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

每个帖子都有一个类别和一个作者。所以,我希望能够在我的查询中按类别名称或作者姓名(而不是id)查找我的帖子。我怎么做?谢谢。

最基本的答案是加入。如果您已正确设置了关联,这应该可以正常工作:

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。

谢谢!但当我有一个相关的模型(我已经更新了我的问题)时,情况又如何呢!100500.00倍;p“谢谢”;结束:)除非您的表只有几百条记录,否则您应该使用Sphinx。像这样的查询不能很好地扩展。