【问题标题】:Rails Has_Many :Through Not Working In RSpec / CucumberRails Has_Many:通过不在 RSpec / Cucumber 中工作
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-16
    • 2012-06-17
    • 2011-08-02
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    相关资源
    最近更新 更多