有人会检查我是否做错了什么?
我的app.rb:
require 'sinatra/base'
require 'sinatra/flash'
require './lib/hangperson_game.rb'
class HangpersonApp < Sinatra::Base
enable :sessions
register Sinatra::Flash
before do
@game = session[:game] || HangpersonGame.new('')
end
after do
session[:game] = @game
end
get '/' do
redirect '/new'
end
get '/new' do
erb :new
#"Hello World!"
end
post '/create' do
@game = HangpersonGame.new(word)
redirect '/show'
end
post '/guess' do
letter = params[:guess].to_s[0]
begin
if letter.nil? || letter.empty? || !((letter=~/^[A-z]$/) == 0)
flash[:message] = "Invalid guess."
elsif !(@game.guess(letter))
flash[:message] = "You have already used that letter."
end
end
redirect '/show'
end
get '/show' do
### YOUR CODE HERE ###
if (@game.check_win_or_lose == :win)
redirect '/win'
elsif (@game.check_win_or_lose == :lose)
redirect '/lose'
else
erb :show
end
end
get '/win' do
### YOUR CODE HERE ###
if (@game.check_win_or_lose != :win)
redirect '/show'
else
erb :win
end
end
get '/lose' do
if (@game.check_win_or_lose != :lose)
redirect '/show'
else
erb :lose
end
end
end
问题是您没有将任何action
(即 url (提供给form
,因此当您单击New Game
按钮时,它将信息发送回到本身就是new
操作,但是使用POST
而不是GET
,从而给您带来了错误。
添加您需要的 action
(我假设是 /create
(在 new
视图中的形式中,如这样:
<form method="post" action="/create">
<input type="submit" value="New Game"/>
</form>
这样,单击New Game
后,该表格将发送到create
操作。
如果创建模块化样式sinatra应用程序(可以在此处阅读(,则应在类的末尾声明此行(内部(:
run! if app_file == $0
现在您可以使用ruby my_modular/application.rb
运行您的应用程序以及rackup -p 4567