Ruby - 从URL中检索一个参数

问题描述:

我完全陌生,所以你不得不原谅我的无知,但我试图将一个动态值传递给一个函数,该函数将所有素数的总和提高到一个限制。我在网址参数传递的动态极限通过,但似乎无法使其工作:Ruby - 从URL中检索一个参数

index.erb:

<form action="/primes"> 
    <input type="text" name="prime_limit" value="<%= @limit %>"> 
    <input type="submit" value="Get Primes"> 
</form> 

app.rb:

get '/primes' do 
    # TODO - Can we make this dynamic? 
    limit = uri.params['prime_limit'] 

    # TODO - add your prime number solution in the primes.rb file. 
    @sum = Primes.sum_to(limit) 

    erb :primes, :layout => :main 
end 

素数。 RB:

require 'uri' 
require 'cgi' 

uri = URI.parse(@object.location) 
uri_params = CGI.parse(uri.query) 

class Primes 
    def self.sum_to(limit) 
    # TODO - add your prime number solution here... 
     require 'prime' 
     Prime.each(limit).inject(:+) 
    end 
end 

primes.erb:

<h1>Prime Numbers</h1> 

Sum : <%= @sum %> 

<div> 
    <a href="/">Back</a> 
</div> 

任何帮助将非常感激。

谢谢

+1

它看起来不像铁轨。是sinatra吗? – BroiSatse

+0

非常抱歉,是的,它是Sinatra。这就是你在这里处理的水平! –

+1

Sinatra自动将URL参数分析到'params'哈希。你不需要自己解析它。只需访问'params ['prime_limit']'。这在Sinatra自述文件的第一部分中已经介绍过了,路径如下:http://www.sinatrarb.com/intro.html#Routes –

也许这个例子可以帮助你吗?只是最低限度的代码(我觉得)你想要做西纳特拉做什么..你的想法

# app.rb 
require 'sinatra' 

get '/' do 
    erb :index 
end 

get '/primes' do 
    @sum = Primes.sum_to(params[:prime_limit].to_i) 
    erb :primes 
end 

class Primes 
    def self.sum_to(limit) 
    # TODO - add your prime number solution here... 
    require 'prime' 
    Prime.each(limit).inject(:+) 
    end 
end 

params[]散列存储查询字符串和表单数据。所以当你抛出GET请求时,查询字符串看起来像example.com/app/?arg=3params[:arg]设置为3

你也可以做get '/app/:arg' do在西纳特拉,这使得/app/45params[:arg] = 45。 Sinatra是一个简单但功能强大的工具,文档并不长。我认为这是值得通过所有或其中大部分。

+1

哦,你现在是我最喜欢的人!非常感谢,它非常完美。我一定会阅读Sinatra文档,我刚刚从我申请的一个编码学校那里接受了这个挑战,而且我对Sinatra没有任何经验,甚至没有基础知识。再次感谢,真的很感激它! –