NoMethodError в баллах#index

В моей игре оценка пользователя has_one, а оценка belongs_to пользователя. Когда пользователь играет, я хочу, чтобы счет этого пользователя заметно увеличивался на 1 каждую секунду, а затем сохранялся, чтобы счет пользователя мог быть виден в таблице лидеров. Я уже придумал код для этого с помощью переменной JavaScript, однако, когда я пытаюсь сделать это с рубиновым объектом, я получаю сообщение об ошибке:

undefined method '+' for nil:NilClass

Контроллер:

class ScoresController < ApplicationController
  before_action :require_user, only: [:index]

  def index
      @score = current_user.score
      @users = User.all
  end
end

Вид:

<div class="score-outline"> Score:<div id="score">0</div></div>

Javascript:

window.setInterval(
function countscore() {
    if($('#game-area').is(':animated')){    
        <%= @score += 1 %>
        document.getElementById("score").innerHTML = <%= @score %>
    }
}, 1000); 

person nums11    schedule 04.08.2016    source источник
comment
Какой файл содержит ваш JavaScript? Похоже, его нет в шаблоне действия index.   -  person Owen    schedule 04.08.2016


Ответы (2)


Проблема в следующем:

В вашем приложении не задано значение для переменной @score, и вы используете оператор +.

решение

Сначала установите @score = 0, а затем попробуйте.

person Pradeep Sapkota    schedule 04.08.2016
comment
Когда я это делаю, я перестаю получать сообщение об ошибке, однако это не меняет сам объект, потому что, когда я позже вызываю значение оценки пользователей, оно все еще кажется пустым @pradeep sapkota - person nums11; 04.08.2016
comment
Вам нужно обновить свою оценку в базе данных, как вы используете боль в таблице, она должна быть целым числом, а не строкой. Затем установите значение по умолчанию 0, и каждый раз, когда оценка увеличивается или уменьшается, обновляйте оценку в базе данных, тогда проблема с вызовом будет решена. - person Pradeep Sapkota; 04.08.2016

неопределенный метод '+' для nil:NilClass

Вы пытаетесь добавить 1 к нулю, поэтому вы получаете эту ошибку

Вместо этого используйте метод increment.

def index
  @user = current_user
end

Увеличить его

@user.increment(:score)
person Deepak Mahakale    schedule 04.08.2016