Ruby on rails 创建未通过默认\u范围找到的记录

Ruby on rails 创建未通过默认\u范围找到的记录,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,以模型为例 class Product < ActiveRecord::Base scope :queued, lambda { where(queued: true) } scope :unqueued, lambda { where(queued: false) } default_scope unqueued end 该产品实际上已创建,但ActiveRecord会产生一个错误,因为它试图通过其id和默认范围查找该产品: ActiveRecord::RecordNot

以模型为例

class Product < ActiveRecord::Base
  scope :queued, lambda { where(queued: true) }
  scope :unqueued, lambda { where(queued: false) }

  default_scope unqueued
end
该产品实际上已创建,但ActiveRecord会产生一个错误,因为它试图通过其id和默认范围查找该产品:

ActiveRecord::RecordNotFound:
  Couldn't find Product with id=15 [WHERE "products"."queued" = 'f']
有解决办法吗?我需要确保我创建的产品已排队。一个简单的解决方法是

p = Product.create
p.update_column(:queued, true)
不过,这似乎是对另一个问题的错误答案,或者可能是正确答案。还有其他选择吗


谢谢您的时间。

最好的解决方案是不要使用
默认范围<代码>默认范围
仅在搜索记录时始终需要应用范围时使用。因此,如果您需要查找
queued
为true的记录,则不应使用
default\u scope

通过默认范围的另一种方法是使用该方法,即:

Product.unscoped.queued

但是,一般来说,如果您需要使用ActiveRecord查找排队的产品,我建议删除您的
default\u范围

是的。
default\u范围
真是太神奇了。使用范围
排队
,并在需要时调用范围会更好,虽然这需要做更多的工作,但更清晰。很抱歉,回复太晚。这也是我的结论!谢谢
Product.unscoped.queued