Ruby on rails Rails4:未定义的方法`尝试失败';零级:零级

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:NilClass

显示/Users/neilpatel/Desktop/Rails/hangman/app/views/games/show.html.erb第3行的位置


**零,
“选定字母”=>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