在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不可知是非常有益的。
答案 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%')