如何在HABTM连接表的Rails查询中包含LIKE子句

时间:2016-05-14 22:36:50

标签: ruby-on-rails

我有两个模型 - 候选人和关键字以及他们之间的has_and_belongs_to_many关联。

如果我想找到一个关键字.name等于某个候选人的所有候选人 - 我只需要在这样的候选模型中进行搜索 - 它运行正常。

def self.search(search)
        includes(:keywords).where("keywords.name" => "#{search}")
end

但是如果我需要搜索其中keyword.name包含字符串(相当于“LIKE”子句)的候选者怎么办?我尝试了多种想法,但找不到一个好的解决方案......

2 个答案:

答案 0 :(得分:2)

试试这个:

.where("keywords.name LIKE ?", "%#{search}%")

修改

注意:这需要在.joins查询之前使用.includes而不是WHERE

答案 1 :(得分:1)

您可以使用参数替换语法使用LIKE查询,使用RAILS支持的任何SQL方言:

def self.search(search)
  includes(:keywords).where("keywords.name LIKE ?", "%#{search}%")
end

这会取代'?'在具有修改的搜索值的查询字符串中,使用搜索字符串“sth”生成此SQL条件:

WHERE keywords.name LIKE '%sth%'  

在查询字符串外部使用“%”(SQL通配符)预设搜索值。在查询字符串中包含“%”将使它们出现在搜索值的引用表示之外:

WHERE keywords.name LIKE %'sth'%  

这根本行不通。