2013-06-13 100 views
0
get '/blackjack/*' do 
    if params[:splat] == "/hit" and defined? session[:bj_game] 
    erb :blackjack 
    elsif params[:splat] == "/fold" and defined? session[:bj_game] 
    session[:bj_hum].fold = true 
    erb :blackjack 
    else 
    if defined? session[:bj_game] 
     new_session_check 
     score_check 
     erb :blackjack 
    else 
     session[:bj_game] = false 
     session[:score] = 0 
     new_session_check 
     score_check 
     erb :blackjack 
    end 
    end 
end 

def new_session_check 
    if session[:bj_game] == false 
    session[:bj_hum] = Blackjack.new 
    session[:bj_com] = Blackjack.new 
    session[:bj_game] = true 
    end 
end 

def score_check 
    if session[:bj_hum].game_loop == false 
    if session[:bj_hum].score.to_i > 0 
     session[:score] += session[:bj_hum].score.to_i 
     check_save(session[:score]) 
    else 
     session[:score] = 0 
    end 
    session[:bj_game] = false 
    session[:bj_hum] = Blackjack.new 
    session[:bj_com] = Blackjack.new 
    end 
end 

每当它得到分数检查,我都会得到NoM​​ethodError - 未定义的方法'game_loop'为NilClass。从另一种方法访问会话

但是,如果我从主页开始:

get '/' do 
    session[:bj_game] = false 
    session[:score] = 0 
    erb :home 
end 

并点击从家里再培训局的链接/酒杯上,它会工作作为new_session_check看到变量是假的,然后创建新Blackjack类的实例(它具有for_g_accessor for game_loop)。

它为什么不在get'/ blackjack'版本中注册?

http://pastebin.com/6EFpp5gh - 以下是您可以运行验证此模型的版本。首先去localhost:4567/blackjack,你会得到一个内部服务错误。重新启动服务器,然后先转到localhost:4567,然后再转到localhost:4567/blackjack,您将看到它的工作原理。

回答

0

你想要一个helper

get 'somepath' do 
    score_check 
end 

helpers do 
    def score_check 
    # now you can access session from within here 
    end 
end 
+0

希望这会工作,但同样的事情。我去http:// localhost:4567/blackjack /手动获取内部服务器错误,但是如果从'/'点击Blackjack,它就会起作用。 – johnnycodami

+1

我做了这个样机版本,有相同的错误:http://pastebin.com/6EFpp5gh运行它,然后直接到本地主机:4567/blackjack /它会得到一个内部服务器错误,然后重新启动并进入本地主机: 4567然后到localhost:4567/blackjack /它不会得到那个错误。 – johnnycodami

相关问题