我是新来的红宝石。下面的代码输出rubypage
参数:Ruby不能放置连接的字符串和散列元素?
cgi = CGI.new
puts cgi.params['rubypage']
但是,只要我改成这样,它什么也不输出
cgi = CGI.new
puts cgi.params['rubypage']+"a"
为什么会出现+"a"
原因的存在没有输出?如何将CGI params
元素与字符串连接起来?
我是新来的红宝石。下面的代码输出rubypage
参数:Ruby不能放置连接的字符串和散列元素?
cgi = CGI.new
puts cgi.params['rubypage']
但是,只要我改成这样,它什么也不输出
cgi = CGI.new
puts cgi.params['rubypage']+"a"
为什么会出现+"a"
原因的存在没有输出?如何将CGI params
元素与字符串连接起来?
如果你检查它的文档,你会发现,CGI.params
返回与参数名称的Hash
作为它的键和参数值名单作为它的值。这容纳了可以多次指定相同查询参数的事实。
如果你想选择一个给定参数的值只有一个,那么你可以索引到CGI对象本身,你应该能够添加一个字符串结果:
或
puts "#{cgi['rubypage']}a"
如果您想为参数的所有值的数组,每个相同的字符串追加,那么你可以做这样的:
rubypageA = cgi.params['rubypage'].map do |value|
"#{value}a"
end
你在做什么应该工作,取决于什么是在该参数散列。
尝试一个简单的测试与IRB:
$ irb
2.1.2 :001 > "string"+"another"
=> "stringanother"
2.1.2 :002 >
Ruby's string interpolation可能是你的兴趣,如果你打算做了很多本。
尝试这种情况:
puts "#{cgi.params['rubypage']}a"
cgi.params['rubypage']
是一个数组。您不能将一个字符串连接到一个数组。 “TypeError:无法将字符串转换为数组”的错误必须记录在某处。
以下添加到您的CGI脚本:
require 'cgi'
$stdout.sync = true #Do not buffer output to STDOUT
$stderr.reopen($stdout) #Send errors to stdout(which goes to your browser)
那么错误信息将被发送到你的浏览器,如:
/usr/local/apache2/cgi-bin/myprog.rb:17:in `': no implicit conversion
of String into Array (TypeError)
这是相同的错误,如果你尝试,你会得到请执行以下操作在常规的Ruby程序:
[1, 2, 3] + 'a'
I read a few other complaints that cgi is 90s, so does that imply also that there are a lot of security risks with cgi?
还有秒对任何网站都有风险。 CGI是非常轻量级的,所以如果你想做简单的事情(或定制的东西),它是好的。这是一个很好的介绍web编程。
我的问题是,你为什么要使用CGI?这是90多岁。而应该使用[Sinatra](http://www.sinatrarb.com)之类的东西,如果你只依赖CGI,它将处理你必须做的很多任务。Sinatra通过Unicorn或Passenger很好地与Apache或nginx集成。 – 2014-10-10 22:12:49
好吧,我会再试试Sinatra ..我安装它时遇到了很多问题。我读过一些其他的抱怨,说CGI是90年代,那么这也意味着cgi存在很多安全风险? – John 2014-10-10 22:21:05
不一定存在安全风险,您只需要开展一项必要工作,而不是必要的工作,这已经被Sinatra等工具所覆盖。再加上Haml,你有一个很好的原型和内部开发系统。使用Passenger或Unicorn在nginx或Apache下运行,并获得一些工业实力。当你想要一个更像Rails的环境时,看看Patron。当你需要它的全部力量时移动到Rails。 – 2014-10-11 22:10:57