0

我目前正在尝试自学 Ruby on Rails。我设置了一个新应用程序并启动并运行它,然后我创建了一个新类 -Player并将其保存在app > models目录中(根据我所阅读的内容,它是从这里自动加载的):

播放器.rb

class Player
  @@players = {}
  def initialise(name, rating=50)
    @name = name
    @rating = rating
    @@players[name] = rating
  end

  def getName()
    return @name
  end
end

index_controller_rb

class IndexController < ApplicationController
    def index
      player1 = Player.new("Martin", 90)
    end
end

index.html.erb

<h1>Test</h1>


<%=  player1.getName() %>

我得到的错误是

wrong number of arguments(2 for 0)

4

1 回答 1

1

你做对了,并且正确地假设了事情。该错误告诉您找到了该类,但您尝试调用的方法不支持 2 个参数。默认initialize方法接受零参数,当您发送两个参数时,它会在您身上爆炸。

这是因为您只是拼错了initialize方法名称,因此您没有使用带有 2 个参数的版本覆盖它。

这个:

def initialise(name, rating=50)

应该:

def initialize(name, rating=50)
#           ^ a "z" here

现在何时Player.new("Martin", 90)调用您的版本initialize(name, rating)将被正确调用。


其次,您似乎想将播放器传递给您的视图。为此,播放器需要是一个实例变量(以@符号开头)。否则它是一个局部变量,并且永远不会离开index控制器方法的范围。实例变量被传递给您的视图。

控制器:

class IndexController < ApplicationController
  def index
    @player1 = Player.new("Martin", 90)
  end
end

看法:

<%= @player1.getName %>
于 2013-05-27T20:03:04.200 回答