我感谢我可能没有表达自己的意思 - 道歉,我有一个公司详情屏幕,也显示公司可能投入的所有/任何演习。对于每个演习,我希望显示任何下拉列表用户可能已经保存的钻取假设。下面是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选择。谢谢
答案 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 }) %>