我写了这个自定义查询,我不认为可以使用活动记录查询界面很好地转换:
SELECT * FROM dockets
INNER JOIN entries
ON entries.docket_id = dockets.id
WHERE NOT EXISTS
(
SELECT 1 FROM entries AS e
WHERE e.docket_id = dockets.id
AND e.docket_type REGEXP 'Key1|Key2|Key3|Key4'
)
我可以使用connection.execute
执行此查询:
sql = "SELECT * FROM dockets INNER JOIN entries ON entries.docket_id = dockets.id WHERE NOT EXISTS ( SELECT 1 FROM entries AS e WHERE e.docket_id = dockets.id AND e.docket_type REGEXP 'Key1|Key2|Key3|Key4' )"
Docket.connection.execute(sql)
问题是不返回ActiveRecord :: Relation。它给了我一个MySQL :: Result对象。因此,我无法在其中附加关系方法:
Docket.connection.execute(sql).limit(10)
NoMethodError: undefined method `limit' for #<Mysql2::Result:0x007fcd1dde6330>
是否有另一个接口我可以用来返回一个ActiveRecord :: Relation对象,以便继续向它添加关系方法?如果没有,我还有其他选择吗?
答案 0 :(得分:0)
你可以这样做:
Docket.joins(:entry).where(Entry.select('1')
.where("entries.dockect_id = dockets.id")
.where("entries.docket_type REGEXP 'Key1|Key2|Key3|Key4'")
.exists.not)