我正在尝试打印工厂bbb_a。
我有两个型号
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?
答案 0 :(得分:1)
您所要做的就是更换
puts aaa.bbbs(:bbb_a)
使用
puts aaa.bbbs.first
或者
puts aaa.bbbs[0]
由于Aaa
和Bbb
模型之间存在has_many关系,因此rails会为Aaa#bbbs
和Bbb#aaa
创建动态实例方法。
此方法接受0或1个参数。如果将参数作为true
传递给此方法,则会触发数据库上的查询以检索关联的记录。如果您将此方法的参数作为false
传递给它,那么它只会获取查询的缓存结果(提供的查询在缓存之前被触发一次)。
所以,当你这样做时
puts aaa.bbbs(:bbb_a)
传递的值只是被忽略,因为它既不是true
也不是false
。