【问题标题】:How to add two parameters from the url如何从 url 添加两个参数
【发布时间】:2013-09-06 20:24:29
【问题描述】:

如何在我的网页中显示int1 + int2 的结果?我可以知道它是整数还是字符串?这是我的代码:

require 'sinatra'

get '/add/:int1/:int2' do
  puts #{params[:int1]} + #{params[:int2]}
end

【问题讨论】:

  • params hash 总是包含Strings,你需要转换它们。此外,在 puts 之后没有引号 "# 将被解释为注释,所以此时你只会得到一个空行

标签: ruby sinatra


【解决方案1】:
"#{params[:int1].to_i + params[:int2].to_i}"

【讨论】:

    【解决方案2】:

    你需要在url中传递它

    http://yourdomain/add/2/3 #=> this will display 5  :int1 => 2, :int2 => 3
    

    对于嵌入/插值变量,在 puts 中使用双引号

    puts "#{params[:int1]} + #{params[:int2]}"
    

    【讨论】:

    • 我这样做了,但我的程序没有显示任何内容。
    【解决方案3】:

    这是应该起作用的东西:

    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。要应用哪种转换,以及如何验证您是否真的有可转换的数字,这有点复杂,如果它困扰您,也许是另一个问题。

    • 最后,使用字符串插值将数字作为String 返回,因为如果您只返回一个数字,Sinatra 会将其作为 HTTP 状态代码。

    请注意,分离为计算并将结果转换为字符串并不是绝对必要的。我在这里这样做只是为了说明这两个部分实际上是你需要做的不同的事情。

    【讨论】:

      【解决方案4】:

      使用块参数更具可读性:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-03
        • 2020-06-29
        • 2023-03-08
        • 2011-04-01
        • 1970-01-01
        • 2012-01-23
        • 1970-01-01
        • 2021-05-02
        相关资源
        最近更新 更多