通过Web运行Ruby脚本

时间:2014-02-12 13:31:43

标签: ruby-on-rails ruby

我正在关注Rails Tutorial by Michael Hart,我已经在第7章了。但我现在想做一些不同的事情,教程没有教导。我想在我的网页中运行一个脚本文件。我怎么能这样做?我在这里看到其他帖子说使用Sinatra,但由于我遵循本教程,我认为使用它并不是一个好主意,因为它可以使一切与教程不同。

以下是我想在我的网页上运行的简单脚本:

#Somando idades

def soma_vetor_excluindo(index,vet)   
    soma = 0   
    for i in 0..9
        if(i!=index)
            soma = soma + vet[i].to_i
        end   
    end   
    return soma 
end

def soma_vetor(vet)   
    soma = 0   
    for i in 0..9
        soma = soma + vet[i].to_i   
    end   
    return soma 
end

def maior_vetor(vet)   
    maior = 0   
    for i in 0..9
        if(maior < vet[i])
            maior = vet[i]
        end   
    end   
    return maior 
end

idades = (0..9).collect{rand(99)+1}

soma_idades = (0..9).collect{0} soma = 0

print "#{idades} \n"

for i in 0..9   
    soma_idades[i] = soma_vetor_excluindo(i,idades) 
end

print "#{soma_idades} \n"

div = soma_vetor(soma_idades) / 9

resp = div - maior_vetor(soma_idades)

puts "#{resp}"

2 个答案:

答案 0 :(得分:3)

最简单的方法是制作方法soma_vetor_excluindosoma_vetormaior_vetor等控制器方法,因此当您通过表单或ajax发送数据时,动作将触发,计算值并返回结果。

知道了这一点,你可以拥有一个控制器,比方说MathController.rb,在其中,soma_vetor_excluindo方法:

class MathController < ApplicationController
  def soma_vetor_excluindo
  end
  def soma_vetor
  end
  def maior_vetor
  end
end

要访问此内容,您可能需要route,因此在routes.rb上添加以下内容:

get 'math/soma_vetor_excluindo/:index/:vet', to 'math#soma_vetor_excluindo'
get 'math/soma_vetor/:vet', to 'math#soma_vetor'
get 'math/maior_vetor/:vet', to 'math#maior_vetor'

这意味着当您的浏览器点击localhost/math/soma_vetor_excluindo/1/2或其他网址时,它会向控制器发送一个get请求,调用soma_vetor_excluindo方法并输入参数params[:index]和{ {1}},理论上脚本会运行。

问题是,您可以通过很少的工作来调整控制器以执行此类操作。

答案 1 :(得分:0)

我认为最简单的解决方案是为每个脚本加载一个页面。首先,您将脚本的路径添加到routes.rb中,例如:

get 'scripts/your_script', to 'scripts#your_script

在控制器(app / scripts_controller.rb)中,您应该添加如下代码:

class ScriptsController < ApplicationController
  #Somando idades

  def soma_vetor_excluindo(index,vet)   
    soma = 0   
    for i in 0..9
        if(i!=index)
            soma = soma + vet[i].to_i
        end   
    end   
    return soma 
  end

  def soma_vetor(vet)   
    soma = 0   
    for i in 0..9
        soma = soma + vet[i].to_i   
    end   
    return soma 
  end

  def maior_vetor(vet)   
    maior = 0   
    for i in 0..9
        if(maior < vet[i])
            maior = vet[i]
        end   
    end   
    return maior 
  end

  def your_script
    idades = (0..9).collect{rand(99)+1}
    soma_idades = (0..9).collect{0} 
    soma = 0

    answer = "#{idades} \n"
    for i in 0..9   
      soma_idades[i] = soma_vetor_excluindo(i,idades) 
    end

    answer << "#{soma_idades} \n"

    div = soma_vetor(soma_idades) / 9
    resp = div - maior_vetor(soma_idades)
    answer << "#{resp}"

    render(text: answer)
  end
end

当您访问页面scripts/your_script时,它应该呈现您的脚本结果的纯文本演示文稿。

虽然这不是最优雅的解决方案,但它可以解决您的问题。