模块作为Rails中的命名空间

时间:2013-11-13 18:46:33

标签: ruby-on-rails ruby module

背景

我们有这个文件结构:

app/services/promo/promotion_expire.rb
app/services/payment/code_pen_subscription.rb

以及下面定义的模块/类。

promotion_expire.rb

module Promo
  class PromotionExpire

  end
end

code_pen_subscription.rb

module Payment
  class CodePenSubscription

    def new_suscription_from_promo
       ##stuff
       Promo::PromotionExpire.new.expire_single(@user, true)
       ##/stuff
    end

  end
end

问题

仅在生产中,我们得到了一个例外

NameE​rror:​ unin​itial​ized ​const​ant P​aymen​t::Pr​omo::​Promo​tionE​xpire

要解决此问题,我们在Promo::PromotionExpire中将::Promo::PromotionExpire更改为new_subscription_from_promo,这告诉ruby从模块层次结构的根目录查看。但我们不知道为什么

  1. 这只发生在生产中(自动加载路径?)
  2. 为什么它只发生在CodePenSubscription而不是其他地方,因为我们在其他地方使用这个习惯用法。

0 个答案:

没有答案