Я совершенно новичок в ruby, поэтому я сделал форму с помощью метода 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: # кодировка: 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 (версия 56859 21 ноября 2016 г.) [x86_64-l])
ОБНОВИТЬ:
Я заменил POST
на GET
only в первом разделе, и это сработало:
# 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
Интересно, правильно ли это, могу ли я сделать только GET для '/'?
post /
? 09.08.2017get /
, а неpost /
:) все, что вы вводите в адресной строке браузера, по умолчанию становитсяget
. 11.08.2017