在我的控制器中,我有以下内容
post "/buy_item" do
redirect '/login' unless session[:name]
@owner = Market::User.user_by_name(params[:owner])
@item = @owner.item_by_id(params[:item].to_i)
@current_user = Market::User.user_by_name(session[:name])
if @current_user.buy_item?(@item)
@current_user.buy_item(@item)
else
redirect '/error'
end
end
当我强制执行“ else
”时,我会正确重定向到/error
,但之后我会直接重定向到另一个页面(/?loggedin=true
)。redirect "/?loggedin=true"
是post "/login"
方法的最后一行。所以,它似乎在POST /login
以某种方式调用..
的路线/error
如下所示:
get "/error" do
redirect '/login' unless session[:name]
template = ERB.new File.new($VIEWS_FOLDER + "/error.erb").read, nil, "%"
template.result(binding)
end
没有/error.erb
重定向,当我直接调用localhost:4567/error时,它不会被重定向。
这是日志:
127.0.0.1 - - [03/Oct/2012 17:15:03] “POST /login HTTP/1.1”303 - 0.0012
本地主机 - - [03/Oct/2012:17:15:03 CEST] "POST /login HTTP/1.1" 303 0
本地主机:4567/登录 -> /登录
127.0.0.1 - - [03/Oct/2012 17:15:03] “GET /?loggedin=true HTTP/1.1”200 3916 0.0055
本地主机 - - [03/Oct/2012:17:15:03 CEST] "GET /?loggedin=true HTTP/1.1" 200 3916
localhost:4567/login -> /?loggedin=true
127.0.0.1 - - [03/Oct/2012 17:15:05] “POST /buy_item HTTP/1.1”303 - 0.0030
本地主机 - - [03/Oct/2012:17:15:05 CEST]“POST /buy_item HTTP/1.1”303 0
本地主机:4567/?loggedin=true -> /buy_item
127.0.0.1 - - [03/Oct/2012 17:15:05] “GET /error HTTP/1.1”200 1609 0.0039
本地主机 - - [03/Oct/2012:17:15:05 CEST] "GET /error HTTP/1.1" 200 1609
本地主机:4567/?loggedin=true -> /error
127.0.0.1 - - [03/Oct/2012 17:15:05] “GET /?loggedin=true HTTP/1.1”200 3916 0.0063
本地主机 - - [03/Oct/2012:17:15:05 CEST] "GET /?loggedin=true HTTP/1.1" 200 3916
localhost:4567/login -> /?loggedin=true