2010-09-07 44 views
0

我觉得我很愚蠢。Ruby SQL:undefined方法`['''

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 

而且我收到以下错误:

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

我是新来的这一点,我相信我基本上是做一些非常愚蠢的。非常感谢。

编辑

下面的好心人已经给我买了,但进一步的,我现在有:

​​

现在我得到的错误:

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

回答

2

rc.query(...)返回设定您可以遍历结果。你不能直接访问它。

看:

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

因为你只有一个行(因为LIMIT 1),你可以这样做:

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

如果你有多个行:

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

谢谢,就是这样! – Alex 2010-09-07 19:05:21

+0

我没有得到这个问题 - release = rc.query('select * from wp_ribcage_releases where release_id = 1 limit 1') release = release.fetch_row puts release ['release_artist'] =无法将String转换为Integer TypeError) \t from ribcage-connect.rb:12 – Alex 2010-09-07 19:16:12

+0

@The Warm Jets:如果您想使用列名称,则为fetch_hash。 fetch_row将使用列索引。另外,为清晰起见,您应该使用其他变量而不是覆盖版本。 – 2010-09-07 19:26:08

0

该错误意味着你不能直接索引(使用[])Result对象。

应该改为(此单排情况下):

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

欲了解更多信息:go here

+0

谢谢,我只是不够努力阅读。 – Alex 2010-09-07 19:07:43