我是红宝石的新手,所以我使用POST http方法创建了一个表单,但它失败如下:
ruby sinatra_msg.rb
[2017-08-04 07:47:50] INFO WEBrick 1.3.1
[2017-08-04 07:47:50] INFO ruby 2.3.3 (2016-11-21) [x86_64-linux]
== Sinatra (v2.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2017-08-04 07:47:50] INFO WEBrick::HTTPServer#start: pid=18141 port=4567
127.0.0.1 - - [04/Aug/2017:07:48:00 -0300] "GET / HTTP/1.1" 404 458 0.0083
127.0.0.1 - - [04/Aug/2017:07:48:00 -03] "GET / HTTP/1.1" 404 458
- -> /
我有以下文件树:
.
├── sinatra_msg.rb
└── views
├── index.erb
└── msg.erb
sinatra_msg.rb的内容: #coding:utf-8 要求'sinatra'
post '/' do
body = params[:body]
erb :index
end
post '/show-msg' do
msg = params[:msg]
text = params[:text]
erb :msg
end
index.erb的内容
<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing Sinatra post</h2>
<form action="/show-msg" method="POST">
subject: <input name="msg[subject]"> <br />
text: <input name="msg[text]"> <br />
<input type="submit">
</form>
</body>
</html>
这是msg.erb的内容:
<!DOCTYPE html>
<html>
<head></head>
<body>
<h2>Testing output</h2>
<h1>Hi!</h1>
<p>
<%= params['msg']['text'] %>
</p>
<a href='/'>Home</a>
</body>
</html>
这段代码有什么问题? (使用ruby 2.3.3p222(2016-11-21修订版56859)[x86_64-l])
我仅在第一部分中将POST
替换为GET
并且有效:
# coding: utf-8
require 'sinatra'
get '/' do
body = params[:body]
erb :index
end
post '/show-msg' do
msg = params[:msg]
text = params[:text]
erb :msg
end
我想知道是否正确,我可以只为'/'获取吗?
答案 0 :(得分:1)
代码是正确的。
当您在浏览器中访问某个页面时,浏览器默认会发送一个GET http方法,您必须在需要时指定POST。
可以POST到'/',HTTP上没有约束,可以将哪个方法应用于网址。