0

multi_xml を使用するようにファラデーをセットアップし、デフォルトで応答本文を解析したいと考えています。

@connection = Faraday.new(base_url) {|builder| builder.response :xml, content_type: /xml/}

次のことにつながります。

NoMethodError: undefined method `[]' for nil:NilClass
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:59:in `response_type'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:31:in `block in call'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday-0.9.0/lib/faraday/response.rb:57:in `on_complete'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday_middleware-0.9.1/lib/faraday_middleware/response_middleware.rb:30:in `call'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday-0.9.0/lib/faraday/rack_builder.rb:139:in `build_response'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday-0.9.0/lib/faraday/connection.rb:377:in `run_request'
from /Users/blanecordes/.rvm/gems/ruby-2.0.0-p353@can/gems/faraday-0.9.0/lib/faraday/connection.rb:177:in `post'

gem の 59 行目:

 def response_type(env)
  type = env[:response_headers][CONTENT_TYPE].to_s
  type = type.split(';', 2).first if type.index(';')
  type
end
4

2 に答える 2

0

このようにビルダー変数をブロックの外に移動してみてください...

@connection = Faraday.new(base_url) do |builder| 
   builder.response :xml, content_type: /xml/
end

これは私にとってうまくいくと思われる例です。

require 'faraday'
require 'faraday_middleware'
require 'pp'

base_url = 'http://www.w3schools.com/xml/note.xml'
@connection = Faraday.new(base_url) do |builder| 
   builder.response :xml,  :content_type => /\bxml$/
end
pp @connection
于 2014-04-24T00:16:19.497 に答える
0

発生したエラーは、アダプター宣言の欠落が原因です。ビルダーのブロックの最後に配置する必要があります。

require 'faraday'
require 'faraday_middleware'

@connection = Faraday.new(base_url) do |builder|
  builder.response :xml, content_type: /\bxml$/
  builder.adapter Faraday.default_adapter
end

参照: faraday_middleware の wiki

于 2016-01-12T17:03:42.877 に答える