我有以下代码:
3.times do |n|
"project#{n}" = FactoryGirl.create(:project, :title => "Project #{n}")
end
这显然不起作用...有没有人知道如何制作循环,我可以使用'本地循环变量'来改变变量名,以生成很多变量,如project1,project2,projekt3?
答案 0 :(得分:6)
你能用哈希吗?
project = {}
3.times do |n|
project[n] = FactoryGirl.create(:project, :title => "Project #{n}")
end
您可以使用project[1]
...
答案 1 :(得分:4)
您可以使用Hashes,如knut建议的那样,或者您可以使用数组 - 因为您从0开始并连续向上移动。
project = Array.new(3)
3.times do |n|
project[n] = FactoryGirl.create(:project, :title => "Project#{n}")
end
或者更简单:
project = []
3.times do |n|
project << FactoryGirl.create(:project, :title => "Project#{n}")
end
答案 2 :(得分:1)
这提供了你所要求的错觉......
eigenclass = class << self; self; end
3.times do |n|
eigenclass.class_eval { attr_accessor "project#{n}" }
eval "self.project#{n} = FactoryGirl.create(:project, :title => \"Project #{n}\")"
end
但请不要这样做。它实际上是在Kernel
上创建了一个属性访问者,每个值为n
一个。
Here是我的参考。