簡體   English   中英

Rails:無法將Regexp轉換為Integer

[英]Rails : can't convert Regexp into Integer

我的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轉換為Integer

如果我模擬您認為問題中的數據結構正在發生什么,我會得到:

@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" ,這在Ruby中很好(我今天學到了一些:-)。 其他原因(可能未顯示在代碼中)使@ l2_mastertest哈希行為不符合預期。

可能這是數據庫/模型問題,並且正如注釋者所建議的, row[0]不包含字符串。

我建議改為SELECT * FROM builds; 這是有風險的,因為您依賴數據庫以特定順序返回列。 您應該更改它以獲取所需的列數據,例如

SELECT version, result, build_id FROM builds;

這樣就可以確保以后的處理正在使用您認為是正確的列。 簡單地重新構建或傳輸數據庫可能會改變RDBMS在SELECT *返回列的順序,並使先前工作的代碼中斷。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM