将值返回到erb值

时间:2013-07-16 14:01:33

标签: html ruby erb

以下代码旨在与sinatra一起使用,以从ERB生成的HTML页面中获取值。它调用fibonacci序列生成器并将HTML中的输入值发送到生成器。该代码然后返回具有从用户输入生成的斐波纳契序列中的接下来的10个数字的句子。然后我希望它能够将该返回值传递到HTML ERB页面。我在这里和其他网站上尝试了很多解决方案,但还没有找到解决我问题的解决方案。

主要代码: 文件名:* / projects / webhosted_custom_fibonacci_calculator.rb

require "rubygems"
require "sinatra"
require_relative 'fibonacci_calculator.rb'
require "erb"


include Calculator


get '/' do
    redirect ("/calculate")
end

get '/calculate' do
    erb :calculator_form, :locals => {:calculator => session[:calculator]}
end

post '/calculate' do
    num1 = params['firstnum'].to_i
    num2 = params['secondnum'].to_i
    output = Calculator.run(num1, num2)
    redirect ("/results_form?results=#{output}")
end

get '/results_form' do
    erb :results_form, :locals => {:results => params[:results]}
end

计算器: 文件名:* / projects / fibonacci_calculator.rb

module Calculator
  def run(arg1, arg2)
    number = [2]
    number[0] = arg1    # Takes in passed values 
    number[1] = arg2
    first_number = number[0].to_i    # Makes sure inputs are integer values 
    second_number = number[1].to_i
    storage = []
    calculate_next = 0
    usage_number_1 = 0
    usage_number_2 = 1


        storage[0] = first_number
        storage[1] = second_number

        for i in (0..8)
            usage_number_1 = storage[i].to_i
            usage_number_2 = storage[i+1].to_i
            calculate_next = usage_number_1 + usage_number_2
            storage.push(calculate_next)
        end

        return "The values are: #{storage}" # Return value works fine
  end

end

输入表单 文件名:* / projects / views / calculator_form.erb

<html>
    <head>
        <title>Fibonacci Calculator</title>
    </head>
    <body>
        <h1>Welcome to the Custom Fibonacci Sequence Calculator</h1>

        <form action="/calculate" method="POST">
            First Number: <input type="number" name="firstnum" id = "1stnum" ><br>
            Second Number: <input type="number" name="secondnum" id = "2ndnum"><br><br>
            <input type="submit" value="Submit"><br>
        </form>

    </body>
</html>

结果表单 文件名:* / projects / views / results_form.erb

<html>
    <head>
        <title>Fibonacci Calculator</title>
    </head>

    <body>
        <h1>Results</h1>

        <form action="/result" method="POST">
        <input type="text" name = "results" id = "out" size = "200" maxlength="600">
        </form>
    </body>
</html>

注意:我得到了返回值并且可以显示结果表单,但返回值没有通过。

1 个答案:

答案 0 :(得分:1)

您没有将输出传递给/results_form

实现这一目标的一种方法:

post '/calculate' do
    num1 = params['firstnum'].to_i
    num2 = params['secondnum'].to_i
    @@output = Calculator.run(num1, num2)
    redirect "/results_form/"
end

get '/results_form/?' do 
    erb :results_form, :locals => {:results => @@output}
end

在结果视图中:

<h1>Results</h1>
<h3><%= results %></h3>

如果您感到惊讶,为什么不需要<html>&amp;它是<Body>标记,因为它们位于layout.erb中,对于完整的源代码,您可以查看我的bitbucket: https://bitbucket.org/l33tname/fibonacci_calculator/src