0

我有一个名为“组”的夹具:

one:
   customer: one
   name: MyString

在一个测试中,我需要更多,所以我想做类似的事情:

  (1..3).each { |t| Group.create!(groups(:one), name: "Group #{t}")}

有没有办法用固定装置做类似的事情?(以上当然行不通)。我知道我可以使用工厂,但我想继续使用固定装置。

4

3 回答 3

1

您可以像使用活动记录对象一样使用您的设备。

# 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

更新:更容易

只记得clone方法,更简单

(1..3).each do |t| 
   new_group = groups(:one).clone
   new_group.name = "Group #{t}"
   new_group.save
end    
于 2016-06-08T18:58:07.913 回答
1

#dup 返回一个新对象。克隆没有 id 的 attrs。

(1..3).each do |t| 
   new_group = groups(:one).dup
   new_group.name = "Group #{t}"
   new_group.save
end 
于 2019-09-16T12:18:51.927 回答
0

你的第二个例子是一种工厂

如果您想使用(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
于 2013-01-31T12:16:54.157 回答