如何在ActiveRecord 3.x中获取所有范围列表

Say*_*yuj 8 ruby activerecord ruby-on-rails-3

我正在使用ActiveRecord和Rails 3.

我在我的模型中定义了范围.如何获取该模型的所有范围列表?

以前我可以使用 Model.scopes

或者我可以检查范围是否已定义?就像是Model.scope_defined?("scope_name")

提前致谢.

old*_*god 6

您可以查看是否以这种方式定义了范围

Model.send(:valid_scope_name?, :scope_name)
Run Code Online (Sandbox Code Playgroud)

true如果确实存在,nil则返回;如果不存在,则返回。

如果您检查的源代码valid_scope_name?,则会看到您可以使用测试它respond_to?,然后避免使用日志记录部分。

Model.respond_to?(scope_name, true)
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在所有“有效作用域名称”所做的工作之前,最好要检查模型是否响应该方法。通过将用户参数(?filter = pending)直接传递给模型,我几乎可以使用它为应用程序中的表提供过滤功能。如果我这样做了,那么用户本可以通过(?filter = destroy_all),然后再见数据库! (7认同)
  • 在Rails 3中,类方法,类属性和作用域之间没有区别。 (2认同)