项目中有template <typename T>
class Myclass
{
public:
T sum;
T func(T A,T... B)
{
sum+=A;
func(B...);
}
T func(T A)
{
sum+=A;
return sum;
}
};
int main()
{
Myclass<int> myclass;
cout<<myclass.func(12,11,11,23);
return 0;
}
和User::CreditCard
个类。最后来自activemerchant gem。
当我运行单一规格(ActiveMerchant::Billing::CreditCard
)时,它可以正常工作
当我运行整个套件(rspec spec/models/user/credit_card_spec.rb
)时,规格会失败并显示rspec spec
,这无关紧要。 问题在于,在这种情况下,我的undefined method...
课程不是我的!
当我运行单一规范并执行CreditCard
(或只是puts User::CreditCard.inpsect
,或只是p User::CreditCard
时),它会按预期返回User::CreditCard
。
当我运行整个套件并在规范中执行User::CreditCard
时,它会返回p User::CreditCard
。
如果您不想阅读“背景”,请确保最后有注意
我正在使用遗留代码。所以我不完全了解图像的所有部分。
我想在我的用户中为信用卡创建ActiveMerchant::Billing::CreditCard
。所以我创建了新的无表格模型(注意路径和类名):
Value Object
当然我有用户模型:
#app/models/user/credit_card.rb
class User::CreditCard
include ActiveModel::Model
delegate :card_number, :card_expiration, :card_type, to: :subscription
def initialize(subscription)
@subscription = subscription || Subscription.new
end
private
attr_reader :subscription
end
我对user / credit_card的规格:
#app/models/user.rb
class User
...
has_one :subscription
...
def credit_card
@credit_card ||= User::CreditCard.new(subscription)
end
end
在规范中我可以要求'user / credit_card'然后它会工作。但是为什么没有它它不起作用? 它可能是另一个地方的问题吗?例如在控制器或其他地方?
答案 0 :(得分:1)
这是轨道自动加载+红宝石恒定分辨率的故障。
class C; end
CONST = 42
C::CONST
#⇒ (pry):3: warning: toplevel constant CONST referenced by C::CONST
#⇒ 42
令人惊讶的是,CONST
已得到解决。那是因为Ruby constant resolution algorithm。
有一个选项可以解决问题:要么为类User::CreditCard
指定一个不同的名称,要么确保它已加载。否则Rails会在CreditCard
命名空间中找到常量ActiveMerchant::Billing
,并且很高兴使用它。