2016-12-15 11 views
0

私はコードを整理するために名前空間を使用していますが、今は少し疑問があります。私は次のコードを持っています:Rubyでのネームスペースのしくみ

module ShopApplication 
    module Models 
    class Product < ::Sequel::Model 
     # Model code 
    end 
    end 
end 

私のすべてのモデルはModelsと呼ばれるこのモジュールに含まれています。私のアプリケーションの別の部分では、私は次のものを持っています:

module ShopApplication 
    module WebInterface 
    class App < ::Sinatra::Base 
     get '/' do 
     @products = ShopApplication::Models::Product.all 
     end 
    end 
    end 
end 

フルパスを指定せずに私のモデルを使用したいと思います。 @products = ShopApplication::Models::Product.all@products = Product.allに変換できますか?はいの場合、どうですか?私はAppクラスにinclude ::ShopApplication::Modelsを試しましたが、うまくいきませんでした。

答えて

2

Module#includeは、ここで使用したいものである:

module ShopApplication 
    module Models 
    class Product < ::Sequel::Model 
     # Model code 
    end 
    end 
end 

module ShopApplication 
    module WebInterface 
    class App < ::Sinatra::Base 
     include ShopApplication::Models 
     get '/' do 
     @products = Product.all 
     end 
    end 
    end 
end 

は、ここでのあなたの依存関係を持っていない不自然な例ですが、クラスメソッドとインスタンスメソッドの両方を示しています

module ShopApplication 
    module Models 
    class Product 
     def name 
     "Product-name" 
     end 
     def self.all 
     ["array", "of", "products"] 
     end 
    end 
    end 
end 

module ShopApplication 
    module WebInterface 
    class App 
     include ShopApplication::Models 
     def instance_meth 
     p Product.new.name 
     end 
     def self.class_meth 
     p Product.all 
     end 
    end 
    end 
end 

ShopApplication::WebInterface::App.new.instance_meth 
ShopApplication::WebInterface::App.class_meth 
関連する問題