我有一个名为"group"的装置:
one:
customer: one
name: MyString
在一个测试中,我还需要几个,所以我想做这样的事情:
(1..3).each { |t| Group.create!(groups(:one), name: "Group #{t}")}
有没有办法用固定装置做这样的事情?(以上当然行不通)。我知道我可以使用工厂,但我想继续使用固定装置。
您可以像使用活动记录对象一样使用灯具。
# get attr from fixture & delete id
attr_from_fixture = groups(:one).attributes
attr_from_fixture.delete('id')
# create new
(1..3).each do |t|
attr_from_fixture[:name] = "Group #{t}"
Group.create!(attr_from_fixture)
end
更新:更简单
只记得克隆方法,就更容易了
(1..3).each do |t|
new_group = groups(:one).clone
new_group.name = "Group #{t}"
new_group.save
end
#dup 返回一个新对象。 克隆不带 id 的 attr。
(1..3).each do |t|
new_group = groups(:one).dup
new_group.name = "Group #{t}"
new_group.save
end
你的第二个例子是一种工厂。
如果要使用 (YAML) 夹具,只需使用类似于第二个示例的脚本生成它们,如下所示:
y = {"two" => {"customer" => "two", "name" => "londiwe"}}.to_yaml
fi = open("groups.yml", "w")
fi.write(y)
fi.close
评论后编辑:如果只想从现有记录中获取属性并基于该记录创建新记录,请使用 clone
:
1. 首先找到要克隆的记录:
orig = Group.find_by_customer("one")
2. 创建克隆,更改其属性并保存
(1..3).each do
tmp_clone = orig.clone
tmp_clone.name = "two"
tmp_clone.save
end