2011-12-23 68 views
0

我通過努力環和匹配以下字符串:的Ruby/Rails - 與未定義的方法錯誤加盟

@custom_channels = { cnn: 2, abc: 90 } 

話,我希望能夠檢查/對陣每返回頻道號(例如,90):

listen_for /channel to (#{@custom_channels.join('|')})/i do |name| 
    change_channel @custom_channels[name.downcase] 
end 

我不斷收到以下錯誤:

scraper.rb:5:in `<main>': undefined method `join' for {:cnn=>2, :abc=>90}:Hash (NoMethodError) 
+0

你期待什麼結果呢? – 2011-12-23 04:23:47

+0

頻道號碼。 – fuzz 2011-12-23 04:25:42

+0

爲什麼在這裏使用'join'?你想用這個做什麼? – 2011-12-23 04:41:57

回答

1

如果我明白你問什麼:

@custom_channels = { cnn: 2, abc: 90 } 

channel_names = @custom_channels.keys.map(&:to_s) 

listen_for /channel to (#{Regexp.union(channel_names)})/i do |name| 
    change_channel @custom_channels[name.to_sym] 
end 
+0

你有一個錯字嗎? '{cnn:2,abc:90} .keys#=> [:cnn,:abc]' – 2011-12-23 04:59:51

+0

您是否有其他錯字? 'Regexp.union([:cnn,:abc] .map(&:to_s))#=>/cnn | abc /' – 2011-12-23 13:37:36

+0

我修正了這個問題:'#{Regexp.union({cnn:2,abc: 90}}'它不喜歡'@ custom_channels.keys'。 – fuzz 2012-01-02 23:06:10

1

試試這個:

1.9.3p0 :007 > channels = {:cnn=>2, :abc=>90} 
=> {:cnn=>2, :abc=>90} 
1.9.3p0 :008 > channels.keys 
=> [:cnn, :abc] 
1.9.3p0 :009 > channels.keys.each do |name| 
1.9.3p0 :010 >  puts channels[name] 
1.9.3p0 :011?> end 
2 
90 
=> [:cnn, :abc] 
+0

我需要它返回實際的數字而不是文本。 – fuzz 2011-12-23 04:33:35

+0

您期望的實際數量是多少? – 2011-12-23 04:35:56

+0

如果我要求「cnn」,我想返回:2 – fuzz 2011-12-23 04:37:43