【发布时间】:2012-06-20 20:49:36
【问题描述】:
在我的用户模型中,我有一个范围:
scope :with_tournament_entrees, :include => :registers, :conditions => "registers.id IS NOT NULL"
我想看看这个作用域生成的 SQL 并产生:
"SELECT \"users\".* FROM \"users\" WHERE (registers.id IS NOT NULL)"
我没有看到我添加的包含参数的任何提及,如果在ActiveRecord::Base.connection.execute 的帮助下在控制台中作为原始 SQL 执行,则会返回错误。另一方面,如果我要在控制台中查询 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(?) 它。
【问题讨论】:
标签: ruby-on-rails-3 postgresql scope erb