Ruby on rails Rails4:未定义的方法`尝试失败';零级:零级
建立一个刽子手游戏并在游戏中获得命名错误,显示,未定义的方法“失败的尝试”为nil:NilClass 显示/Users/neilpatel/Desktop/Rails/hangman/app/views/games/show.html.erb第3行的位置Ruby on rails Rails4:未定义的方法`尝试失败';零级:零级,ruby-on-rails,Ruby On Rails,建立一个刽子手游戏并在游戏中获得命名错误,显示,未定义的方法“失败的尝试”为nil:NilClass 显示/Users/neilpatel/Desktop/Rails/hangman/app/views/games/show.html.erb第3行的位置 **零, “选定字母”=>nil} 结束 def属性=(散列) hash.each do |键、值| 发送(“#{key}=”,值) 结束 结束 def尝试失败 选择字母。选择字母| !单词。包括?(字母) }.尺寸 结束 你猜到了吗? (w
**零,
“选定字母”=>nil}
结束
def属性=(散列)
hash.each do |键、值|
发送(“#{key}=”,值)
结束
结束
def尝试失败
选择字母。选择字母|
!单词。包括?(字母)
}.尺寸
结束
你猜到了吗?
(word.split(“”)-选定的字母。是否为空?
结束
def完成了吗?
失败的尝试>=最大失败的尝试次数!猜到了吗?
结束
def选择!(信)
如果完成,则提高游戏错误率?
精选字母我想问题就在这里
def current_game
@current_game ||= load_current_game
end
如果@current\u game为nil,则将查找未定义的load\u current\u game方法。
即使您有该方法,它也会出于某种原因返回nil。什么是当前游戏
?您的当前游戏
变量是nil.updated application\u controller。rb@Neil加载当前游戏:在哪里定义?
class Game
include ActiveModel::AttributeMethods, ActiveModel::Serializers::JSON
class GameOverError < StandardError; end
MAX_FAILED_ATTEMPTS = 5
attr_accessor :word
attr_accessor :selected_letters
def initialize
@word = 'Hangman'.upcase
@selected_letters =[]
end
def attributes
{'word' => nil,
'selected_letters' => nil}
end
def attributes=(hash)
hash.each do |key, value|
send("#{key}=", value)
end
end
def failed_attempts
selected_letters.select { |letter|
!word.include?(letter)
}.size
end
def guessed?
(word.split('') - selected_letters).empty?
end
def finished?
failed_attempts >= MAX_FAILED_ATTEMPTS || !guessed?
end
def select!(letter)
raise GameOverError if finished?
selected_letters << letter unless selected_letters.include? letter word.include? letter
end
end
class GamesController < ApplicationController
def new
session[:current_game] = Game.new
redirect_to game_path
end
def show
end
def update
current_game.select! params[:letter]
update_current_game
rescue Game::GameOverError
flash[:alert] = 'This game is Finished....'
ensure
redirect_to game_path
end
def destroy
set_current_game nil
redirect_to root_path
end
end
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
helper_method :current_game
def current_game
@current_game ||= load_current_game
end
def set_current_game(game)
@current_game = game
session[:serialized_current_game] = game.present? ? game.to_json : nil
end
def update_current_game
set_current_game @current_game
end
def current_game
@current_game ||= load_current_game
end