0

我有以下代码:

3.times do |n|
    "project#{n}" = FactoryGirl.create(:project, :title => "Project #{n}")
end

这显然不起作用......有谁知道如何制作循环,我可以在其中制作变量名,该变量名将随“局部循环变量”而改变,以制作很多变量,如 project1、project2、projekt3?

4

3 回答 3

6

你可以使用哈希吗?

project = {}
3.times do |n|
    project[n] = FactoryGirl.create(:project, :title => "Project #{n}")
end

project[1]您可以通过...访问数据

于 2013-07-17T18:53:52.813 回答
4

您可以按照 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
于 2013-07-17T19:26:18.233 回答
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.

是我的参考。

于 2013-07-17T21:17:25.500 回答