1

請求書モデルには、 と の 2 つの列がありcustomer_idますcustomer_name。オートコンプリート (JQuery) を使用するために、setter と gettercustomer_nameが請求書モデルに追加されました。

  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常に. ゲッターとセッターがインボイス モデルから削除された場合、FactoryGirl は正しい値をとに割り当てます。FactoryGirl は次のとおりです。nilFactoryGirl.build(:invoice)customer_idcustomer_name

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

  end

customer_name結果の getter と setter がnilFactoryGirl になるのはなぜですか?

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

請求書テーブルの列であるcustomer_nameを使用する代わりに、jqueryオートコンプリートのフィールドcustomer_name_autocompleteを追加しました。基本的に、問題を回避するだけで、上記の問題の原因はわかりません。失敗したすべてのrspecケースは再び合格します。

于 2012-10-26T19:55:36.230 に答える