2016-02-26 59 views
0

我完全陌生,所以你不得不原諒我的無知,但我試圖將一個動態值傳遞給一個函數,該函數將所有素數的總和提高到一個限制。我在網址參數傳遞的動態極限通過,但似乎無法使其工作: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 –

回答

1

也許這個例子可以幫助你嗎?只是最低限度的代碼(我覺得)你想要做西納特拉做什麼..你的想法

# 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沒有任何經驗,甚至沒有基礎知識。再次感謝,真的很感激它! –