0

特别是当您使用 Searchlogic 时。我很难猜测使用什么命名范围来实现我的需要。

4

1 回答 1

1

您可以获得模型的所有已定义命名范围,使用

Model.scopes
=> {:one_scope_name=>#<Proc:0x0000...>, :other_scope_name=>#<Proc:0x0000...>, ... }

它给你一个哈希,所以如果你只想要名字,使用Model.scopes.keys

但这只会给你已经定义的范围。它不会帮助您使用由 searchlogic 生成的范围,因为正如您在文档中所读的那样(在幕后部分),诸如field_eqetc 之类的范围仅在首次使用时才创建:

“Searchlogic 利用 method_missing 来创建所有这些命名范围。当它命中 method_missing 时,它会创建一个命名范围,以确保它不会再次命中该命名范围的缺失方法。一种缓存机制。它的工作方式与 ActiveRecord 的相同“ find_by_*” 方法。这样只会创建您需要的命名范围,仅此而已。”

于 2010-05-10T16:41:19.443 回答