【问题标题】:NoMethodError in Scores#index分数中的 NoMethodError#index
【发布时间】:2016-08-04 02:27:07
【问题描述】:

在我的游戏中,用户has_one 得分和belongs_to 用户得分。当用户在玩时,我希望该用户的分数每秒增加 1,然后保存,以便用户的分数可以在排行榜上可见。我已经想出了使用 JavaScript 变量执行此操作的代码,但是当我使用 ruby​​ 对象尝试它时,我收到一条错误消息:

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); 

【问题讨论】:

  • 哪个文件包含您的 JavaScript?看起来它不在索引操作的模板中。

标签: javascript ruby-on-rails ruby nomethoderror


【解决方案1】:

问题是:

您的应用中没有为 @score 变量设置值,您正在使用 + 运算符。

解决方案

先设置@score = 0再试试。

【讨论】:

  • 当我这样做时,我停止收到错误,但是它不会更改对象本身,因为当我稍后调用用户得分值时,它仍然显示为空 @pradeep sapkota
  • 你需要更新你在数据库中的分数,你如何在表中使用酸痛它应该是整数而不是字符串。然后设置默认值0,每次score增加或减少数据库中的更新分数然后调用sore问题就会解决
【解决方案2】:

nil:NilClass 的未定义方法“+”

您正在尝试将 1 添加到 nil,这就是您收到此错误的原因

改用increment方法

def index
  @user = current_user
end

增加它

@user.increment(:score)

【讨论】:

    猜你喜欢
    • 2015-07-09
    • 2014-02-07
    • 1970-01-01
    • 2012-03-02
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多