我正在尝试打印工厂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
endbbbs.rb
FactoryGirl.define do
factory :bbb do
factory :bbb_a do
end
factory :bbb_b do
end
end
endaaa_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?
发布于 2014-04-25 21:13:02
你所要做的就是
puts aaa.bbbs(:bbb_a)任一种
puts aaa.bbbs.first或
puts aaa.bbbs[0]因为在has_many模型和Aaa模型之间有一个Bbb关系,rails为您创建了Aaa#bbbs和Bbb#aaa的动态实例方法。此方法接受0或1个参数。如果将参数作为true传递给此方法,则会在数据库上激发查询以检索相关的记录。如果将一个参数作为false传递给该方法,那么它只会获取查询的缓存结果(如果查询是在此之前触发一次以进行缓存)。
所以,当你做了
puts aaa.bbbs(:bbb_a)传递的值被简单地忽略,因为它既不是true也不是false。
https://stackoverflow.com/questions/23302892
复制相似问题