项目中的类与gem

时间:2016-05-15 00:12:31

标签: ruby-on-rails ruby namespaces rubygems twilio

所以,我遇到了一个有趣的问题。在我的项目中,我有一个名为“Builder”的类。我们已运行此应用多年,最近我们意识到我们需要Twilio。这需要Builder gem(https://github.com/jimweirich/builder)。我遇到的问题是覆盖了名称。我该怎么做才能确保我可以使用twilio并继续我的构建器类?这个命名空间噩梦的阻力最小的路径是什么?

1 个答案:

答案 0 :(得分:2)

避免命名空间冲突的常用方法是使用自己的命名空间:

module MyApp
  class Builder
  end
end

这基本上是如何编写所有有价值的红宝石宝石,因为它使互操作性成为可能。位于rails应用程序的/lib目录中的命名空间非常简单。但命名空间所有控制器,模型等都不太令人愉快。它杀死了"它的正常工作"铁轨魔术。

明显的命名空间如:

namespace :api do
  namespace :v1 do
    resources :things
  end
end

非常直截了当。然而,透明的命名空间相当棘手 - 即将代码放在模块中而不会显着改变路由,路径助手或数据库表名。

您可以使用以下命名空间控制器:

scope module: 'my_app' do
  resources :things
end

哪会路由到MyApp::ThingsController而不影响路径或帮助程序。您可以将控制器放在app/controllers/my_app/things_controller.rb