我的rails控制器中有以下代码:
@main_mastertest = $connection.execute("SELECT * FROM builds;")
@l2_tmp_mastertest = Array.new
@l2_tmp_mastertest = @main_mastertest.map {|y|[y[0]]}
@l2_mastertest = Array.new
@l2_mastertest = @l2_tmp_mastertest.inject(Hash.new(0)) { |hash,element|
hash[element] +=1
hash }
@l2_mastertest = @l2_mastertest.sort_by { |x, _| x }.reverse
之后我尝试在我看来做这样的事情:
<% @l2_mastertest.each_with_index do |row1, index1| %>
<% @l2_mastertest.each_with_index do |row2, index2| %>
<% if row2[0][ /(\d+\.\d+)/ ].to_s == row1[0].to_s %> # LINE X
..................
<% end %>
<% end %>
<% end %>
但它在X行上给出了一个错误:无法将Regexp转换为整数
答案 0 :(得分:1)
如果我模拟我认为你的问题中的数据结构正在发生什么,我得到这个:
@l2_mastertest = { '3.1.4' => 7, '1.2.3' => 8 }
=> {"3.1.4"=>7, "1.2.3"=>8}
@l2_mastertest.each_with_index { |row2,index| p row2,index }
["3.1.4", 7]
0
["1.2.3", 8]
1
因此像row2[0][ /(\d+\.\d+)/ ]
这样的结构与例如"3.1.4"[ /(\d+\.\d+)/ ]
相同。 "3.1.4"[ /(\d+\.\d+)/ ] => "3.1"
编辑:删除了我以前的“答案”,因为实际上row[0]
,这在Ruby中很好(我今天学到了一些东西:-)。其他东西(可能在代码中未显示)使得@ l2_mastertest散列不按预期运行。
这可能是数据库/模型问题,正如评论者所建议的那样,SELECT * FROM builds;
不包含字符串。
我建议使用SELECT version, result, build_id FROM builds;
是有风险的,因为您依靠数据库按特定顺序返回列。您应该更改它以获取所需的列数据,例如。
SELECT *
这样您就可以确定以后的处理正在使用您认为的列。简单地重新构建或传输数据库可能会改变RDBMS返回{{1}}中列的顺序,并使以前工作的代码中断。