【问题标题】:How namespaces work in Ruby?命名空间在 Ruby 中是如何工作的?
【发布时间】:2017-05-01 03:37:30
【问题描述】:

我使用命名空间来组织我的代码,但现在我有点怀疑。我有以下代码:

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::Models 加入App 课程,但没有奏效。

【问题讨论】:

    标签: ruby module architecture namespaces organization


    【解决方案1】:

    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
    

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-08
      • 1970-01-01
      • 2018-08-08
      • 1970-01-01
      相关资源
      最近更新 更多