Ruby on rails 通过web运行Ruby脚本

Ruby on rails 通过web运行Ruby脚本,ruby-on-rails,ruby,Ruby On Rails,Ruby,我已经在读第七章了。但是我现在想做一些不同的事情,这本教程没有教。我想在我的网页中运行一个脚本文件。我怎么能做到?我在这里看到其他帖子说要使用Sinatra,但由于我在学习本教程,我认为使用它不是一个好主意,因为它可以使所有内容与本教程不同 下面是我想在我的网页上运行的简单脚本: #Somando idades def soma_vetor_excluindo(index,vet) soma = 0 for i in 0..9 if(i!=index

我已经在读第七章了。但是我现在想做一些不同的事情,这本教程没有教。我想在我的网页中运行一个脚本文件。我怎么能做到?我在这里看到其他帖子说要使用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}"
#Somando idades
def soma_vetor_excluindo(索引,兽医)
soma=0
因为我在0..9
如果(i!=索引)
soma=soma+vet[i]。to_i
结束
结束
返回体
结束
def soma_兽医(兽医)
soma=0
因为我在0..9
soma=soma+vet[i]。to_i
结束
返回体
结束
def maior_vetor(兽医)
maior=0
因为我在0..9
如果(主值
最简单的方法是使方法
soma_vetor_excluindo
soma_vetor
maior_vetor
等成为控制器方法,因此当您通过表单或ajax发送数据时,操作将触发、计算值并返回结果

知道了这一点,您就可以拥有一个控制器,比如说
MathController.rb
,其中包含
soma_vetor_excluindo
方法:

class MathController < ApplicationController
  def soma_vetor_excluindo
  end
  def soma_vetor
  end
  def maior_vetor
  end
end
这意味着,当浏览器点击
localhost/math/soma_vetor_excluindo/1/2
或其他URL时,它将向控制器发送get请求,调用
soma_vetor_excluindo
方法并输入参数,
params[:index]
params[:vet]
,因此理论上脚本将运行


问题是,你可以调整你的控制器来做类似的事情,只需很少的工作。

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

get 'scripts/your_script', to 'scripts#your_script
在控制器(app/scripts\u 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
class ScriptsController回答我如何使“soma_vetor_excluindo”成为控制器方法?我使用
计算
只是为了简化事情。你可以称之为“soma_vetor_excluindo”
。让我编辑一下。首先,谢谢你帮我!但我还是不知道怎么解决这个问题。也许我太新手了。现在看起来是这样的:我为脚本创建了一个名为“2011question6”的静态页面,所以在我的静态页面上,我得到了
def minigame@title=“2011question6”end
我已经像你说的那样创建了MathController。但是如果我插入你对routes.rb说的话,我的网站就会崩溃。所以我不知道在routes.rb上放什么。现在我只使用routes.rb
match'/2011question6page',到:'static_pages#2011question6page',通过:'get'
当我需要访问服务器上的某些服务时,我会这样做。在我的例子中,我有像
admin/:service.:action=>“admin#service”
这样的URL,因此如果经过身份验证的用户转到像
admin/mailer.这样的东西,重新启动它将调用我的管理员控制器的服务操作。从那里,我把逻辑放在停止、启动、重新启动或任何指定的服务上。您需要将其更改为(0..9)。每个{i|my|u method(i)}或“do/end”(如果它是多行的话)。此外,请查看Ruby的inject方法,用于对数组求和,并获得可以arr.sort{x,y | yx}的最高值。首先,您希望打印和put的输出显示在哪里?如果您想编程客户端(在用户的浏览器中),可以使用javascript。
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