2013-06-13 2 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 

Всякий раз, когда он получает оценку чека, я получаю NoMethodError - Неопределенный метод 'game_loop' для NilClass.Доступ к занятиям по другому методу

Однако, если я начну с главной страницы:

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

и нажмите на ссылку/блэкджеке из дома Еврорадио, он будет работать как new_session_check увидел, что переменная была ложной, а затем создал новый экземпляры класса Blackjack (у которого есть attr_accessor для game_loop).

Почему он не регистрируется в версии get '/ blackjack?

http://pastebin.com/6EFpp5gh - Вот версия макета, которую вы можете запустить, чтобы проверить это. Сначала перейдите на localhost: 4567/blackjack, и вы получите внутреннюю служебную ошибку. Перезагрузите сервер, затем перейдите на localhost: 4567 сначала, а затем localhost: 4567/blackjack afterward, и вы увидите, что он работает.

ответ

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 запустите ее, затем перейдите прямо к localhost: 4567/blackjack/она получит внутреннюю ошибку сервера, затем перезапустит ее и перейдет на localhost: 4567, а затем на localhost: 4567/blackjack/он не получит эту ошибку. – johnnycodami

Смежные вопросы