考虑模型
class Product < ActiveRecord::Base
scope :queued, lambda { where(queued: true) }
scope :unqueued, lambda { where(queued: false) }
default_scope unqueued
end
Product.first 产生 SQL 查询
SELECT "products".* FROM "products" WHERE "products"."queued" = 'f' LIMIT 1
现在,如果我想创建一个“不符合默认范围”的记录怎么办?像这样:
Product.queued.create!
该产品实际上是创建的,但 ActiveRecord 会产生错误,因为它试图通过它的 id 和默认范围来查找产品:
ActiveRecord::RecordNotFound:
Couldn't find Product with id=15 [WHERE "products"."queued" = 'f']
有解决方法吗?我需要确保我创建的产品已排队。一个简单的解决方法是
p = Product.create
p.update_column(:queued, true)
不过,这似乎是另一个问题的错误答案,或者它可能是正确的答案。有替代品吗?
谢谢你的时间。