2

モデルを共有するためのいくつかの一般的なスコープを作成しようとしているので、これを作成しました:

lib
|_ scopes
   |_ scope.rb
   |_ bars.rb

# lib/scopes/scope.rb
module Scope
end

# lib/scopes/bars.rb
module Scope
  module Bars
    def self.included(base)
      base.class_eval{
        scope :somescope, lambda{ where(:foo => :bar) }
      }
    end
  end
end

これをモデルに入れると:

include Scope::Bars

エラーがスローされます:バーを定義するためにc:/sites/app_name/lib/scopes/bars.rbが必要です

奇妙な理由で、WEBrickサーバーの代わりにRailsコンソールを使用してテストした場合、これは発生しません。

また、サブモデルを使用しない場合でも完全に機能します。たとえば、次のように問題なくinclude Bars機能します。

何か案は?

4

1 に答える 1

5

次の構造

lib
|_ scopes
   |_ scope.rb
   |_ bars.rb

では、最上位モジュールをScopesではなくとして定義する必要がありますScope。フォルダの名前を からscopesscope変更するか、モジュールを に変更します

# lib/scopes/bars.rb
module Scopes
  module Bars
    def self.included(base)
      base.class_eval do
        scope :somescope, lambda { where(:foo => :bar) }
      end
    end
  end
end
于 2012-06-29T13:53:27.750 に答える