2013-04-22 2 views
0

Я следую за Rob Conery в его учебном видео Tekpub/Rails 3. Я думаю, что что-то изменилось между версиями Rack в видео-релизе (1.1) и версией на моей машине (1.4.5). Я не знаю, как понять, что мне нужно делать по-другому.Ruby on Rails/Rack 1.4.5 return from Call Method/Can not Convert String to Array

В следующем коде у меня есть строковая переменная out, и я пытаюсь конкатенировать строчную переменную (третий элемент массива, возвращаемый методом MyApp.Call).

class EnvironmentOutput 

    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    out = "" 

    unless(@app.nil?) 
     response = @app.call(env)[2] 

     # The Problem is HERE (Can't Convert Array to String): 
     out+=response 
    end 

    env.keys.each {|key| out+="<li>#{key}=#{env[key]}"} 
    ["200", {"Content-Type" => "text/html"}, [out]] 
    end 

end 

class MyApp 
    def call(env) 
    ["200", {"Content-Type" => "text/html"}, ["<h1>Hello There</h1>"]]  
    end 
end 

use EnvironmentOutput 
run MyApp.new 

Но я получаю ошибку:

"Can't Convert Array to String" at `out+=response` 

Что я здесь отсутствует?

ответ

2

Вы пытаетесь добавить строку в массив. Третий элемент

["200", {"Content-Type" => "text/html"}, ["<h1>Hello There</h1>"]] is ["<h1>Hello There</h1>"] 

- массив.

Вы можете изменить этот массив в строку с присоединиться:

response = @app.call(env)[2].join 
+0

Ха! Благодарю. Я пытался использовать соединение, но не в том месте. :-) – XIVSolutions