在我的用户模型中,我有一个范围:
scope :with_tournament_entrees, :include => :registers, :conditions => "registers.id IS NOT NULL"
我想看看这个范围生成的 SQL 并产生:
"SELECT \"users\".* FROM \"users\" WHERE (registers.id IS NOT NULL)"
我没有看到任何提及我添加的包含参数,如果在控制台中作为原始 SQL 在ActiveRecord::Base.connection.execute
. 另一方面,如果我要在控制台中查询 User.with_tournament_entrees ,它会产生我需要的正确的8 条记录,没有任何错误,查看日志我看到正在执行的 SQL 语句......
SELECT "users"."id" AS t0_r0, "users"."email" AS t0_r1,
"users"."encrypted_password" AS t0_r2, ....
"registers"."id" AS t1_r0, "registers"."competition_id" AS t1_r1,
"registers"."user_id" AS t1_r2 ...
FROM "users" LEFT OUTER JOIN "registers" ON "registers"."user_id" = "users"."id"
WHERE (registers.id IS NOT NULL)
这看起来是正确的,所以只是为了仔细检查,我复制了 SQL 并将其包装在里面ActiveRecord::Base.connection.execute
,它执行得很好——除了现在而不是像我调用范围时那样得到8 条记录,而是得到12 条记录。
是什么赋予了?它正在执行完全相同的 SQL 对吗?那么为什么我会得到不同的结果呢?我正在使用 PostgreSQL 数据库。
哦,我知道你不应该在 Rails 3 中使用范围,这就是为什么我要尝试使用 SQL,以便弄清楚如何 ActiveRecordify(?) 它。