1
如何使用Rails 3.1獲取ActiveRecord模型中所有作用域的列表?如何獲取ActiveRecord所有作用域的列表(rails 3.1)
根據3.0.9的文檔應該有一種稱爲「範圍」http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html#method-i-scopes的方法,但該方法似乎並不存在。
如何使用Rails 3.1獲取ActiveRecord模型中所有作用域的列表?如何獲取ActiveRecord所有作用域的列表(rails 3.1)
根據3.0.9的文檔應該有一種稱爲「範圍」http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html#method-i-scopes的方法,但該方法似乎並不存在。
您可以使用Model.send(:valid_scope_name?, scope_name)
來測試範圍是否存在於該類中。範圍在Rails 2.x中確實有意義,但在3.x中不再有關係對象。
所以不是:
scope :red_ones, where(color: 'red')
你必須:
def self.red_ones
where(color: 'red')
end
我不想使用valid_scope_name?因爲它是受保護的方法並記錄了一條奇怪的警告消息:logger.warn「Creating scope:#{name}。」「覆蓋現有方法#{self.name}。#{name}。」 我想使用範圍而不是方法(如您所建議的),因爲它使我的代碼更好,我希望能夠測試它是否是範圍或文檔指定應該是可能的。 – Peder
我遇到了這個問題,測試範圍的存在。我將斷言從'assert klass.scopes.include?(name)'改爲'assert klass.name'。這並沒有回答上述問題,但確實對我有幫助。希望這可以幫助別人。 –
opps。最後一個代碼應該是'assert klass.try(name)',其中'name'是作用域的名稱。 –