【发布时间】:2015-06-10 02:10:47
【问题描述】:
我写了这个自定义查询,我认为使用活动记录查询接口不能很好地转换:
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 对象,以便我可以继续向它附加关系方法吗?如果没有,我还有什么其他选择?
【问题讨论】:
-
您正在检查是否需要其 docket_type 没有此正则表达式 'Key1|Key2|Key3|Key4'..right 的记录?
-
@test 我要检索所有案卷及其相关条目,其中没有一个相关条目包含正则表达式“Key1|Key2|Key3|Key4”。这意味着如果案卷的所有条目都不包含它,那么我想要案卷和条目。如果一个条目确实包含它,那么我不想要案卷或条目。
标签: ruby-on-rails activerecord