1

在我们的发票模型中,有两列 -customer_idcustomer_name。为了使用自动完成(JQuery),customer_name在发票模型中添加了一个 setter 和 getter:

  def customer_name
    customer.try(:name)
  end

  def customer_name=(name)
    self.customer = Customer.find_by_name(name) if name.present?
  end 

在发票模型中,有:

  belongs_to :customer

然而在那之后,customer_id并且customer_name总是nilFactoryGirl.build(:invoice). 如果从发票模型中删除了 getter 和 setter,则 FactoryGirl 将正确的值分配给customer_idand customer_name。这是工厂女孩:

 factory :invoice do 
.....
    customer_id             2
    customer_name           'a customer name'
...

  end

为什么在 FactoryGirl中会出现customer_nameresult的 getter 和 setter?nil

4

2 回答 2

1

FactoryGirl.build(:invoice)实际上并没有保存新实例化的对象。您可能需要使用 FactoryGirl 的内置回调来获取此滚动。

未测试

FactoryGirl.define do
  factory :customer do
    name "A customer"
  end
end

FactoryGirl.define do
  factory :invoice do
    name "An invoice"
    after_build do |invoice|
      invoice.customer = FactoryGirl.build(:customer)
    end
  end
end

一些资源...

http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl

http://icelab.com.au/articles/factorygirl-and-has-many-associations/

希望这会为您指明正确的方向!

于 2012-10-26T03:37:16.110 回答
0

我们所做的是为 jquery 自动完成添加一个字段 customer_name_autocomplete,而不是使用 customer_name,它是 invoices 表中的一列。基本上我们只是绕过问题,不知道是什么导致了上述问题。所有失败的 rspec 案例再次通过。

于 2012-10-26T19:55:36.230 回答