【发布时间】:2012-05-02 03:05:26
【问题描述】:
我目前有一个范围,我正在尝试查找在关联中创建的最后一条记录,并在特定布尔值为 false 时选择它
IE Foo has_many Bar's 和 Bar's 有一个名为 bazzed 的布尔列
scope :no_baz, joins(:bars).order("bars.id DESC").limit(1).where("bars.bazzed = 'f'")
问题在于 rails 把这个查询变成了这样的东西
SELECT "foos".* FROM "foos" INNER JOIN "bars" ON "bars"."foo_id" = "foos"."id" WHERE (bars.bazzed = 'f') ORDER BY bars.id DESC LIMIT 1
问题在于 rails 在 where 子句之后调用 order 和 limit,我正在寻找的是先执行 order 和 limit 以尝试找到最后一个设置为 false 的 bar。
是否有原生 AR 方式来执行我试图完成的查询?
编辑
我正在尝试抓取具有 bar 的 foo,其中他们的最后一个 bar 设置为 false,并且仅当该 foo 的最后一个 bar 设置为 false 时。
【问题讨论】:
-
如果您尝试以下操作会怎样:"scope :no_baz, joins(:bars).order("bars.id DESC").where("bars.bazzed = 'f'").first ”。由于我不确定它是否有效,因此我不建议将其作为答案。 ^^
-
仅当 bazzed 字段为 false 时才尝试获取第一条记录。这目前抓住了第一个 bazzed,不管它是否是第一个记录。
标签: sql ruby-on-rails activerecord