2016-12-15 70 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嗎?如果是,如何?我嘗試include ::ShopApplication::ModelsApp類,但沒有奏效。

回答

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