2010-09-07 5 views
0

Je pense que je suis stupide.Ruby SQL: méthode non définie `[] '

rc = Mysql.new('CENSORED_HOST','username','password','db') 
release = rc.query('select * from wp_ribcage_releases where release_id = 1 limit 1') 

puts release["release_title"] 

rc.close 

Et je reçois l'erreur suivante:

ribcage-connect.rb:17: undefined method `[]' for #<Mysql::Result:0x1011ee900> (NoMethodError) 

Je suis nouveau et je suis sûr que je fais essentiellement quelque chose de très stupide. Merci beaucoup.

EDIT

Les gens aimables en dessous de moi ont eu une, mais plus loin, maintenant j'ai:

rc = Mysql.new('server','user','pword','db') 

release = rc.query('select * from wp_ribcage_releases where release_id = 1 limit 1') 

row = release.fetch_row 
puts row['release_title'] 

rc.close 

Et maintenant, je reçois l'erreur:

ribcage-connect.rb:12:in `[]': can't convert String into Integer (TypeError) 
    from ribcage-connect.rb:12 

Répondre

2

le rc.query(...) retourne un jeu de résultats, vous pouvez itérer. Vous ne pouvez pas y accéder directement.

Regardez:

http://www.kitebird.com/articles/ruby-mysql.html#TOC_7

Puisque vous avez une seule ligne (à cause de LIMIT 1) vous pouvez faire:

row = release.fetch_hash 
puts row['release_title'] 

Si vous avez plusieurs lignes:

while row = release.fetch_hash do 
puts row["release_title"] 
end 
+0

Merci, c'est ça! – Alex

+0

Je ne reçois pas ce problème - release = rc.query ('select * de wp_ribcage_releases où release_id = 1 limite 1') release = release.fetch_row puts libération ['release_artist'] = impossible de convertir la chaîne en entier (TypeError) \t de ribcage-connect.rb: 12 – Alex

+0

@The Warm Jets: C'est fetch_hash si vous voulez utiliser des noms de colonnes. fetch_row utilisera les index de colonne. En outre, vous devez utiliser une variable différente au lieu d'écraser la version, pour plus de clarté. –

0

Cette erreur signifie que vous ne pouvez pas indexez directement (utilisez []) l'objet Résultat.

Il devrait plutôt être (pour ce cas d'une seule ligne):

row = release.fetch_hash 
puts row["release_title"] 

Pour plus d'informations: go here

+0

Merci, je ne lisais pas assez dur. – Alex

Questions connexes