Ruby on rails 通过web运行Ruby脚本
我已经在读第七章了。但是我现在想做一些不同的事情,这本教程没有教。我想在我的网页中运行一个脚本文件。我怎么能做到?我在这里看到其他帖子说要使用Sinatra,但由于我在学习本教程,我认为使用它不是一个好主意,因为它可以使所有内容与本教程不同 下面是我想在我的网页上运行的简单脚本: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
#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.rbmatch'/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