2014-04-25 35 views
0

我正在嘗試打印工廠bbb_a。搜索協會

我有兩個型號

  • AAA的has_many商務改善局
  • BBB belongs_to的AAA

aaas.rb

FactoryGirl.define do 
    factory :aaa do 
    after(:build) do |aaa| 
     aaa.bbbs << build(:bbb_a) 
     aaa.bbbs << build(:bbb_b) 
    end 
    end 
end 

bbbs.rb

FactoryGirl.define do 
    factory :bbb do 
    factory :bbb_a do 
    end 
    factory :bbb_b do 
    end 
    end 
end 

aaa_spec.rb

require 'spec_helper' 
describe Aaa do 
    it "works" do 
    aaa = FactoryGirl.create(:aaa) 
    puts aaa.bbbs(:bbb_a) #This gives both bbb_a and bbb_b 
    aaa.should_not be_nil 
    end 
end 

控制檯輸出

Bbb 1 
Bbb 2 
. 

Finished in 0.11593 seconds 
1 example, 0 failures 

Randomized with seed 44359 

我所期待的

Bbb 1 
. 

Finished in 0.11593 seconds 
1 example, 0 failures 

Randomized with seed 44359 

爲什麼它把bbb_a和bbb_b都放?我如何才能打印出bbb_a?

回答

1

所有你所要做的就是更換

puts aaa.bbbs(:bbb_a) 

無論使用哪種

puts aaa.bbbs.first 

或者

puts aaa.bbbs[0] 

因爲你有AaaBbb模型之間的的has_many關係,軌道創建動態實例方法爲Aaa#bbbsBbb#aaa。 此方法接受0或1個參數。如果您將參數傳遞給此方法爲true,則它會觸發數據庫上的查詢以檢索關聯的記錄。如果你將這個方法的參數作爲false傳遞給它,那麼它只是提取查詢的緩存結果(提供的查詢在緩存發生之前被觸發一次)。

所以,當你做

puts aaa.bbbs(:bbb_a) 

傳遞的值會被忽略其既不truefalse

+0

假設我有1000個這樣的bbbs,我不知道哪個[#]去哪個值。有什麼方法可以搜索一個值嗎? –

+1

如果你知道一些獨特的屬性或id的值,那麼只需指定它'aaa.bbbs.where(attr1:value)' –