2011-08-06 59 views
2

我目前正在部署rails應用程序到heroku。該應用程序是軌道2.3.3出於某種原因,也許是因爲它是一個不同的紅寶石,我沒有得到一個奇怪的語法錯誤Ruby 1.9.1語法錯誤

這裏是我的錯誤

Downloading postal codes. 
rake aborted! 
/app/app/models/postal_code.rb:13: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' 
     when Integer: first(:conditions => { :code => code }) 
       ^
/app/app/models/postal_code.rb:14: syntax error, unexpected keyword_when, expecting keyword_end 
     when Hash: first(:conditions => {... 
     ^
/app/app/models/postal_code.rb:59: syntax error, unexpected keyword_end, expecting $end 

這裏是我的代碼文件(POSTAL_CODE .RB)

11 def self.get(code) 
12 case code 
13 when Integer: first(:conditions => { :code => code }) 
14 when Hash: first(:conditions => { :city => code[:city], :state => code[:state] }) 
15 else raise InternalException.new("Invalid input.") 
16 end 
17 end 


51 # now set min and max lat and long accordingly 
52 area[:min_lat] = latitude - area[:lat_degrees] 
53 area[:max_lat] = latitude + area[:lat_degrees] 
54 area[:min_lon] = longitude - area[:lon_degrees] 
55 area[:max_lon] = longitude + area[:lon_degrees]  
56  
57 area 
58 end 

任何的想法是什麼,多數民衆贊成腳麻

+1

使用冒號when'聲明成爲無效的語法的Ruby 1.9的:你可以使用then

case code when Integer then first(:conditions => { :code => code }) when Hash then first(:conditions => { :city => code[:city], :state => code[:state] }) else raise InternalException.new("Invalid input.") end 

或換行符。您可能在本地系統上使用1.8。 @維克托的答案在下面是正確的。我__strongly__建議將您的開發環境保留在與生產環境相同的Ruby版本上。很多小東西在1.8和1.9之間發生變化,可能會導致類似的問題。 –

回答

2

這應該工作:

def self.get(code) 
case code 
    when Integer then first(:conditions => { :code => code }) 
    when Hash then first(:conditions => { :city => code[:city], :state => code[:state] }) 
    else raise InternalException.new("Invalid input.") 
    end 
end 
6

從1.9.1 NEWS文件:

* Deprecated syntax 
     o colon (:) instead of "then" in if/unless or case expression. 

所以你不能使用冒號與case了。在`

case code 
    when Integer 
    first(:conditions => { :code => code }) 
    when Hash 
    first(:conditions => { :city => code[:city], :state => code[:state] }) 
    else 
    raise InternalException.new("Invalid input.") 
end