虽然它在开发和生产中有效,但一旦我尝试在RSpec或Cucumber中利用has_many:through关系,它就会返回nil。就这样:
订单模型(简化):
class Order < ActiveRecord::Base
has_one :shipping_address, through :checkout
end
Checkout模型(简化):
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
答案 0 :(得分:0)
我认为你应该在Checkout模型关联定义中使用belongs_to而不是has_one。 如has_one方法docs中所述:
指定与另一个类的一对一关联。仅当其他类包含外键时才应使用此方法。如果当前类包含外键,则应使用+ belongs_to +代替。
在这里: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html