如何从url添加两个参数
如何在我的网页中显示int1 + int2
的结果? 我可以知道它是整数还是字符串? 这是我的代码:
require 'sinatra' get '/add/:int1/:int2' do puts #{params[:int1]} + #{params[:int2]} end
"#{params[:int1].to_i + params[:int2].to_i}"
你需要在url中传递它
http://yourdomain/add/2/3 #=> this will display 5 :int1 => 2, :int2 => 3
嵌入/插值变量使用带引号的双引号
puts "#{params[:int1]} + #{params[:int2]}"
这是应该工作的东西:
require 'sinatra' get '/add/:int1/:int2' do sum = params[:int1].to_i + params[:int2].to_i "#{sum}" end
我改变了以下内容:
-
删除了
puts
– 它适用于调试,但Sinatra使用返回值,而不是STDOUT(基于CGI可能使用的框架)通过Web服务器输出。 我在这里假设您正在浏览器中查看。 -
删除了
#{ variable }
语法 – 这是为了将计算插入到String
结果中,这里不需要。 如果你正在构建一个更复杂的字符串,它可能是要走的路。 -
将参数转换为
Fixnum
,使用to_i
它们最初将始终为String
。 要应用哪种转换,以及如何validation你真的有可转换的数字,这有点复杂,或许是另一个问题,如果它困扰你。 -
最后,使用字符串插值返回数字作为字符串,因为如果只返回一个数字,Sinatra会将其作为HTTP状态代码。
请注意,分离计算并将结果转换为字符串并非绝对必要。 我这里做的只是为了说明这两个部分实际上是你需要做的不同的事情。
使用块参数更具可读性:
get "/add/:int1/:int2" do |a, b| "#{a.to_i + b.to_i}" end
您甚至可以使用正则表达式来确保整数:
get %r{/add/(\d+)/(\d+)} do |a, b| "#{a.to_i + b.to_i}" end