【问题标题】:Rails: search by SQL with different modelsRails:使用不同模型的 SQL 搜索
【发布时间】:2012-04-17 13:22:22
【问题描述】:

我有这样的模型:

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

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

【问题讨论】:

  • 除非您的表只有几百条记录,否则您应该使用 Sphinx。像这样的查询并不能很好地扩展。

标签: ruby-on-rails ruby-on-rails-3 search


【解决方案1】:

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

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次做; p "谢谢";结束:)
猜你喜欢
  • 2011-11-06
  • 1970-01-01
  • 2011-02-20
  • 2015-02-15
  • 2014-09-01
  • 2014-10-20
  • 2013-09-19
  • 2012-07-21
  • 1970-01-01
相关资源
最近更新 更多