2013-04-04 22 views
0

我在我的軌道控制器下面的代碼: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線說:不能將正則表達式轉換爲整數

+1

你想達到什麼目的?使用正則表達式作爲索引不起作用,因此錯誤,但我無法理解你想做什麼,因此無法幫助更多。 – Tass 2013-04-04 06:20:17

+0

row2 [0]將是一個字符串,如「3.0.1.4」 – 2013-04-04 06:48:26

+0

這個帖子中沒有問題。 – DNNX 2013-04-04 07:12:50

回答

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",這在Ruby中很好(我今天學到了一些東西:-)。其他的東西(可能在代碼中沒有顯示)正在使@ l2_mastertest哈希行爲不如預期。

這可能是一個數據庫/模型問題,並按照評論者的建議,row[0]不包含字符串。

我會建議,而不是SELECT * FROM builds;是有風險的,因爲你是依靠數據庫以特定的順序返回列。您應該改變它以獲取您需要的列數據,例如

SELECT version, result, build_id FROM builds; 

因此,您可以確定後續處理與您認爲它的列一起工作。簡單地重新構建或傳輸數據庫可能會改變RDBMS返回SELECT *中的列的順序,並使先前的代碼中斷。