Rails Has_Many:通过不在RSpec / Cucumber中工作

时间:2013-08-12 20:37:55

标签: ruby-on-rails rspec cucumber

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

1 个答案:

答案 0 :(得分:0)

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

  

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

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