1

虽然它在开发和生产中都有效,但一旦我尝试在 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
4

1 回答 1

0

我认为您应该在 Checkout 模型关联定义中使用 belongs_to 而不是 has_one 。如 has_one 方法文档中所述:

指定与另一个类的一对一关联。仅当其他类包含外键时才应使用此方法。如果当前类包含外键,那么您应该使用 +belongs_to+ 代替。

在这里: http ://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

于 2013-09-12T10:07:52.780 回答