创建可变命名的数组

时间:2014-08-14 06:20:59

标签: ruby-on-rails ruby

我感谢我可能没有表达自己的意思 - 道歉,我有一个公司详情屏幕,也显示公司可能投入的所有/任何演习。对于每个演习,我希望显示任何下拉列表用户可能已经保存的钻取假设。下面是relvent代码。 来自控制器

...
@drill_interests = @company.drill_interests
first_index = 0
@drill_interests.each do |di|
  @array_name = "eval_assum" + first_index.to_s
  @array_name = Array.new
  @matched_eval_assum = 
    EvaluationAssumption.matched_eval_assum(@current_user.id,  di.drill_id)
  second_index = 0
  if @matched_eval_assum.present?
    @matched_eval_assum.each do |mea|
      data_for_select = {"id" => second_index, "name" => mea.user_save_name, 
            "table_index" => mea.id,}
      @array_name = @array_name << data_for_select
      second_index += 1
    end
  else
    puts "no matches found"
  end 
  first_index += 1 
end 

创造阵列,例如。 eval_assum0,eval_assu1等具有0到多个id,name和table索引的哈希值。 设置了跟踪语句后,我知道我正以预期的方式循环遍历数据。但是,我尝试访问数组,见下文,似乎表明我没有按预期构建数组。好像&#34; eval_assum0&#34;是一个字符串(不是数组)。我做错了什么? 一如既往地感谢 - 皮埃尔

...    <% index = 0 %>
...
    <% @array_name = "eval_assum" + index.to_s %>
      <%= select("name", "id",
          @array_name.collect {|r| [ r["user_save_name"], r["id"] ] },
          { :include_blank => true })  %>

进一步的carification。 因此,例如,公司EML投资于两个钻头 - (例如,钻头-01和钻头-02)。用户已为drill-01保存了2个evaluation_assumptions,为drill-02保存了3个评估假设。当然,公司可以投资0到多个钻头。 在Drill-01旁边的Eml页面上尝试创建adrop下拉列表(有两个选项),然后在Drill-03旁边(hree选择。谢谢

1 个答案:

答案 0 :(得分:1)

通常来说,变量名称不是变量。将@array_name设置为"eval_assum" + index.to_s就可以了 - @array_name现在是字符串,其值为"eval_assum0" 不是数组名为eval_assum0

如果你想要一组动态命名的数组,我建议你使用容器来保存它们,就像Hash

@assumptions = {}
@drill_interests = @company.drill_interests
first_index = 0
@drill_interests.each do |di|
  array_name = "eval_assum" + first_index.to_s

  # set the array inside the hash
  @assumptions[array_name] = Array.new

  @matched_eval_assum = 
    EvaluationAssumption.matched_eval_assum(@current_user.id,  di.drill_id)
  second_index = 0
  if @matched_eval_assum.present?
    @matched_eval_assum.each do |mea|
      data_for_select = {"id" => second_index, "name" => mea.user_save_name, 
            "table_index" => mea.id,}

      # fill the array inside the hash
      @assumptions[array_name] << data_for_select

      second_index += 1
    end
  else
    puts "no matches found"
  end 
  first_index += 1 
end 

...    <% index = 0 %>
...
    <% array_name = "eval_assum" + index.to_s %>
      <%= select("name", "id",
          @assumptions[array_name].collect {|r| [ r["user_save_name"], r["id"] ] },
          { :include_blank => true })  %>