【发布时间】:2013-08-12 20:37:54
【问题描述】:
虽然它在开发和生产中都有效,但一旦我尝试在 RSpec 或 Cucumber 中利用 has_many :through 关系,它就会返回 nil。因此:
订单模型(简化):
class Order < ActiveRecord::Base
has_one :shipping_address, through :checkout
end
结帐模型(简化):
class Checkout < ActiveRecord::Base
has_one :shipping_address, :class_name => 'ShippingAddress', :as => :addressable
end
规格:
describe "shipping_address" do
it "should return a ShippingAddress" do
@order.checkout.shipping_address.is_a? ShippingAddress # return true
@order.shipping_address.is_a? ShippingAddress # returns false (is NilClass)
end
end
【问题讨论】:
-
您的订单模型显示
shipping_address,但您的规范正在谈论billing_address。您可以为billing_address发布适当的型号代码吗? -
哦,感谢您指出这一点。实际上有送货地址和帐单地址。除了类之外,它们是相同的。我将 billing_address 更改为 shipping_address 以避免混淆。
-
您分享的规范片段没有定义
@order。您能否分享您规范的所有相关部分以及您收到的输出?在不知道对象是如何创建的情况下,无法评估涉及@order的各种表达式的情况。
标签: ruby-on-rails rspec cucumber