2010-10-28 4 views
-1

Pourquoi est-ce incorrect? Qu'est-ce qui va pas avec ça??Ruby Class 500 Erreur

#!/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

Une erreur 500 doit toujours produire une entrée détaillée du journal des erreurs. –

+0

La seule erreur est que la page d'erreur 500 n'existe pas dans le journal:/ – Will03uk

Répondre

1
  1. ensure est toujours appelée, peu importe si une exception a été soulevée ou non. Donc vous essayez d'interroger sur une connexion fermée. Donc, supprimez le con.close d'assurer. Vous pourriez vouloir return d'ici puisqu'il n'est pas possible d'interroger un objet nul.
  2. Vous avez probablement require 'rubygems' au début, avant require 'mysql' (si en cours d'exécution en tant que fichier indépendant)
  3. if row['id'].nil devrait être if row['id'].nil?
+0

Merci cela a arrêté l'erreur, mais il retourne encore nul pour chaque colonne ?? – Will03uk

+0

Essayez 'puts row.inspect' comme première instruction dans la boucle. Vous aurez une meilleure idée de ce qui est retourné. Il se peut que les colonnes soient vides. – Swanand

+0

J'ai créé 3 instances de la classe appelée id 1, 2 et 3 et elle ne place qu'une seule fois row.inspect, puis elle s'est arrêtée. Donc ça ne finit pas la page ?? – Will03uk

0

Au lieu de coder votre propre adaptateur MySQL, essayez ActiveRecord, DataMapper sur tout autre ORM pour vous rendre la vie plus facile.