2011-07-27 9 views
1

Rails 3.1を使用してActiveRecordモデル内のすべてのスコープのリストを取得するにはどうすればよいですか?ActiveRecord(レール3.1)のすべてのスコープのリストを取得する方法

3.0.9のドキュメントによれば、「スコープ」http://api.rubyonrails.org/classes/ActiveRecord/NamedScope/ClassMethods.html#method-i-scopesというメソッドが存在するはずですが、そのメソッドは存在しないようです。

答えて

0

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 
+1

私はvalid_scope_nameを使用したくないのですか? logger.warn "スコープの作成:#{name}" "既存のメソッド#{self.name}。#{name}を上書きする"という警告メッセージを記録します。 私はコードをより良くするために、メソッドではなくスコープを使用したいと思っています。スコープであるかどうかをテストできるようにするために、ドキュメントで指定する必要があります。 – Peder

+0

私はスコープの存在をテストするこの問題に遭遇しました。アサーションを「assert klass.scopes.include?(name)」から「assert klass.name」に変更しました。これは上記の質問に答えることはできませんが、それは私を助けました。うまくいけば、これは他の誰かを助けるでしょう –

+0

opps。最後のコードは 'assert klass.try(name)'でなければなりません。 'name'はスコープの名前です。 –

関連する問題