将 rails2 移动到 4 并出现错误 - 未定义的方法“with_scope”
moving rails2 to 4 and getting error - undefined method `with_scope'
如何在 rails4.1.9 中替换此查询
AuditArea.send(query_options[:include_retired] ? :with_exclusive_scope : :with_scope) {
# some stuff
}
获取错误未定义方法`with_scope'。
with_scope
在较新的 Rails 版本中现在称为 scoping
。 with_exclusive_scope
现在应该是 unscoped
。这两种方法都接受一个块,因此您的代码应该可以正常使用它们。
有关详细信息,请参阅 scoping
and unscoped
的文档。
更新: 如果调用 class 本身,scoping
方法将不起作用。它必须已经在作用域上被调用(与 unscoped
相反,它在裸模型 class 上工作)。我首先将 "harmless" 范围 all
(select 包含所有记录,因此其行为与裸模型 class AuditArea
相同)添加到 select 这样 send
的两个变体都可以工作:
AuditArea.all.send(query_options[:include_retired] ? :unscoped : :scoping) {
# ...
}
如何在 rails4.1.9 中替换此查询
AuditArea.send(query_options[:include_retired] ? :with_exclusive_scope : :with_scope) {
# some stuff
}
获取错误未定义方法`with_scope'。
with_scope
在较新的 Rails 版本中现在称为 scoping
。 with_exclusive_scope
现在应该是 unscoped
。这两种方法都接受一个块,因此您的代码应该可以正常使用它们。
有关详细信息,请参阅 scoping
and unscoped
的文档。
更新: 如果调用 class 本身,scoping
方法将不起作用。它必须已经在作用域上被调用(与 unscoped
相反,它在裸模型 class 上工作)。我首先将 "harmless" 范围 all
(select 包含所有记录,因此其行为与裸模型 class AuditArea
相同)添加到 select 这样 send
的两个变体都可以工作:
AuditArea.all.send(query_options[:include_retired] ? :unscoped : :scoping) {
# ...
}