Sinatra 将参数作为散列传递给函数
Sinatra passing params as a hash to function
我正在尝试将参数的哈希值传递给我在 sinatra 中的 post 服务资源中的一个函数,见下文。
post '/service' do
create_itop_entry(params)
end
我的函数正在将参数传递给....
def create_itop_entry(fields)
params = {'json_data' => '{"operation":"core/create",
"comment":"Service created on ' + Time.now.strftime("%Y-%m-%d") + '",
"class":"Service",
"fields":{
org_id: "'+ fields["org_id"] +'",
status: "' + fields["status"] + '",
stack_type: "' + fields["stack_type"] + '",
version: "' + fields["version"] + '",
hostname: "' + fields["hostname"] + '",
longitude: "' + fields["longitude"] + '",
latitude: "' + fields["latitude"] + '",
abbreviation_code: "' + fields["abbreviation_code"] + '",
name: "' + fields["name"] + '",
email: "' + fields["email"] + '",
apn: "' + fields["apn"] + '"
},
"output_fields":"id, friendlyname"
}'
}
end
下面的函数调用 returns 我的预期结果...这是添加到我的 json_data 中的哈希值。当我从 sinatra 打印出 params.inspect 时,它 returns 与下面相同的散列。
puts create_itop_entry({"org_id"=>"4", "status"=>"pilot", "stack_type"=>"single", "version"=>"2.9.29", "hostname"=>"test.pilot.net", "longitude"=>"-81.20", "latitude"=>"41.20", "abbreviation_code"=>"zzz", "name"=>"Test-Test", "email"=>"test@testing.com", "apn"=>"TestRange1 10.36.192.80-28,TestRange2 10.131.201.0-24"})
我得到的错误是没有将数组隐式转换为字符串...我是 ruby/sinatra 的新手,所以我可能只是遗漏了一些简单的东西...
[2016-08-27 17:28:03] DEBUG WEBrick::HTTPServlet::FileHandler is mounted on /.
[2016-08-27 17:28:03] DEBUG Rack::Handler::WEBrick is mounted on /.
[2016-08-27 17:28:03] INFO WEBrick::HTTPServer#start: pid=32343 port=4567
[2016-08-27 17:28:14] DEBUG accept: ::1:58203
[2016-08-27 17:28:14] DEBUG Rack::Handler::WEBrick is invoked.
[2016-08-27 17:28:15] ERROR TypeError: no implicit conversion of Array into String
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:113:in `block in service'
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:112:in `each'
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:112:in `service'
/usr/share/ruby/2.0/webrick/httpserver.rb:138:in `service'
/usr/share/ruby/2.0/webrick/httpserver.rb:94:in `run'
/usr/share/ruby/2.0/webrick/server.rb:295:in `block in start_thread'
localhost - - [27/Aug/2016:17:28:14 UTC] "POST /service HTTP/1.1" 500 338
您的函数return是一个散列。这不是 return from a Sinatra route 的有效类型。返回哈希会导致网络服务器混淆,从而导致此错误。
也许您的意思是调用 to_json
和 return 结果字符串?
我正在尝试将参数的哈希值传递给我在 sinatra 中的 post 服务资源中的一个函数,见下文。
post '/service' do
create_itop_entry(params)
end
我的函数正在将参数传递给....
def create_itop_entry(fields)
params = {'json_data' => '{"operation":"core/create",
"comment":"Service created on ' + Time.now.strftime("%Y-%m-%d") + '",
"class":"Service",
"fields":{
org_id: "'+ fields["org_id"] +'",
status: "' + fields["status"] + '",
stack_type: "' + fields["stack_type"] + '",
version: "' + fields["version"] + '",
hostname: "' + fields["hostname"] + '",
longitude: "' + fields["longitude"] + '",
latitude: "' + fields["latitude"] + '",
abbreviation_code: "' + fields["abbreviation_code"] + '",
name: "' + fields["name"] + '",
email: "' + fields["email"] + '",
apn: "' + fields["apn"] + '"
},
"output_fields":"id, friendlyname"
}'
}
end
下面的函数调用 returns 我的预期结果...这是添加到我的 json_data 中的哈希值。当我从 sinatra 打印出 params.inspect 时,它 returns 与下面相同的散列。
puts create_itop_entry({"org_id"=>"4", "status"=>"pilot", "stack_type"=>"single", "version"=>"2.9.29", "hostname"=>"test.pilot.net", "longitude"=>"-81.20", "latitude"=>"41.20", "abbreviation_code"=>"zzz", "name"=>"Test-Test", "email"=>"test@testing.com", "apn"=>"TestRange1 10.36.192.80-28,TestRange2 10.131.201.0-24"})
我得到的错误是没有将数组隐式转换为字符串...我是 ruby/sinatra 的新手,所以我可能只是遗漏了一些简单的东西...
[2016-08-27 17:28:03] DEBUG WEBrick::HTTPServlet::FileHandler is mounted on /.
[2016-08-27 17:28:03] DEBUG Rack::Handler::WEBrick is mounted on /.
[2016-08-27 17:28:03] INFO WEBrick::HTTPServer#start: pid=32343 port=4567
[2016-08-27 17:28:14] DEBUG accept: ::1:58203
[2016-08-27 17:28:14] DEBUG Rack::Handler::WEBrick is invoked.
[2016-08-27 17:28:15] ERROR TypeError: no implicit conversion of Array into String
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:113:in `block in service'
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:112:in `each'
/home/geapp/.gem/ruby/2.0/gems/rack-1.6.4/lib/rack/handler/webrick.rb:112:in `service'
/usr/share/ruby/2.0/webrick/httpserver.rb:138:in `service'
/usr/share/ruby/2.0/webrick/httpserver.rb:94:in `run'
/usr/share/ruby/2.0/webrick/server.rb:295:in `block in start_thread'
localhost - - [27/Aug/2016:17:28:14 UTC] "POST /service HTTP/1.1" 500 338
您的函数return是一个散列。这不是 return from a Sinatra route 的有效类型。返回哈希会导致网络服务器混淆,从而导致此错误。
也许您的意思是调用 to_json
和 return 结果字符串?