如何使用ActiveRecord与连接表进行部分匹配?

时间:2015-12-07 19:31:16

标签: ruby join activerecord where partial

在ActiveRecord中,我可以通过使用一点点的SQL来进行部分匹配,如下所示:

Foo.where("name LIKE ?", "%matchthis%")   

但是,我希望做一些更复杂的事情:在两个表之间使用字符串连接并对结果进行部分匹配。在PostgreSQL中,我会这样做:

select
  foos.id

from
  foos

join
  bars on
  bars.id = foos.bar_id

where
  foos.name || '.' || bars.name like '%match.this%'

;

如何使用ActiveRecord执行上述操作?我非常希望仅使用ActiveRecord语法,如果我不能,那么让SQL模糊SQL不可知是非常有益的。

1 个答案:

答案 0 :(得分:0)

多一点ActiveRecord:

Foo.joins(:bars).where("foos.name || '.' || bars.name LIKE ?", '%match.this%')

这会在AR中生成一个查询但不确定它是否正是您要查找的内容。产生的查询是:

SELECT "foos".* FROM "foos" 
INNER JOIN "bars" ON "bars"."foo_id" = "foos"."id" 
WHERE (foos.name || '.' || bars.name LIKE '%match.this%')

您可能希望单独处理它,如:

Foo.where('foos.name LIKE ?', '%match%').joins(:bars).where('bars.name LIKE ?', '%this%')


SELECT "foos".* FROM "foos" 
INNER JOIN "bars" ON "bars"."foos_id" = "foos"."id" 
WHERE (foos.name LIKE '%match%') AND (bars.name LIKE '%this%')