2010-10-28 90 views
-1

爲什麼這是不正確的。它有什麼問題?Ruby Class 500錯誤

#!/usr/bin/ruby 

require "mysql" 

class Game 
    attr_accessor :id, :name, :urlName, :description, :hits, :categorys, :width, :height, :nilGame 

    def load(id) 
    #Load mysql 
    begin 
     # connect to the MySQL server 
     con = Mysql.new('localhost', 'user', 'pass', 'database') 
    rescue Mysql::Error => e 
     puts "mysql error" 
     ensure 
     # disconnect from server 
     con.close if con 
    end 
    rs = con.query("select * from games where id='#{id}' limit 1") 
    rs.each_hash do |row| 
     if row['id'].nil 
     @nilGame = true 
     else 
      @id = id 
      @name = row['name'] 
      @urlName = row['urlname'] 
      @description = row['description'] 
      @hits = row['hits'] 
      @categorys = row['categorys'] 
      @width = row['width'] 
      @height = row['height'] 
     end 
    end 
    con.close 
    end 
end 
+0

500錯誤應始終生成詳細的錯誤日誌條目。 – 2010-10-28 09:52:32

+0

唯一的錯誤是在日誌中不存在500錯誤頁面:/ – Will03uk 2010-10-28 09:55:45

回答

1
  1. ensure總是被調用,不管異常升高與否。所以你試圖查詢一個關閉的連接。所以刪除con.close確保。您可能想從return開始,因爲無法查詢零對象。
  2. 你可能需要require 'rubygems'在開始之前,require 'mysql'(如果作爲一個獨立的文件中運行)
  3. if row['id'].nil應該if row['id'].nil?
+0

謝謝你停止了錯誤,但它仍然返回nil爲每列? – Will03uk 2010-10-28 10:16:37

+0

嘗試將'puts row.inspect'作爲循環中的第一條語句。你會更好地瞭解返回的內容。這可能是列實際上是空的。 – Swanand 2010-10-28 10:18:27

+0

我創建了3個名爲id 1,2和3的類的實例,它只放一次row.inspect,然後停止。所以它沒有完成頁面? – Will03uk 2010-10-28 10:25:30

0

代替編碼自己的MySQL適配器,嘗試的ActiveRecord,DataMapper的任何其他ORM讓你的生活更輕鬆。