Ruby on rails 3.1 如何获取ActiveRecord(rails 3.1)所有作用域的列表
如何使用Rails 3.1获得ActiveRecord模型中所有作用域的列表 根据3.0.9的文档,应该有一个名为scopes的方法,但该方法似乎不存在 您可以使用Model.send:valid\u scope\u name?,scope\u name来测试该类中是否存在该作用域。范围在Rails2.x中确实有意义,但在3.x中不再有意义,因为在3.x中有关系对象 因此:Ruby on rails 3.1 如何获取ActiveRecord(rails 3.1)所有作用域的列表,ruby-on-rails-3.1,Ruby On Rails 3.1,如何使用Rails 3.1获得ActiveRecord模型中所有作用域的列表 根据3.0.9的文档,应该有一个名为scopes的方法,但该方法似乎不存在 您可以使用Model.send:valid\u scope\u name?,scope\u name来测试该类中是否存在该作用域。范围在Rails2.x中确实有意义,但在3.x中不再有意义,因为在3.x中有关系对象 因此: scope :red_ones, where(color: 'red') 你应该: def self.red_one
scope :red_ones, where(color: 'red')
你应该:
def self.red_ones
where(color: 'red')
end
我不想使用有效的\u范围\u名称?因为它是一个受保护的方法,并且记录了一条奇怪的警告消息:logger.warn Creating scope:{name}。覆盖现有方法{self.name}.{name}。我希望使用作用域而不是您建议的方法,因为它使我的代码更漂亮,并且我希望能够测试它是否是一个作用域,正如文档指定的那样。我在测试作用域的存在时遇到了这个问题。我将断言从“assert klass.scopes.include?name”更改为“assert klass.name”。这并不能回答上面的问题,但它确实帮助了我。希望这对其他人有帮助。最后一个代码应该是“assert klass.tryname”,其中“name”是作用域的名称。有效的\u作用域\u名称?只是调用respond_的方法?在幕后。这很糟糕,因为这意味着危险的方法也会作为作用域传递,例如destroy_all!对不起,但我认为这并不能回答问题。。。我来这里的原因和OP一样,我想看看这样的东西,请看答案,以便更好地阅读。。。。