0

私は現在、Ruby on Rails を独学で学ぼうとしています。新しいアプリをセットアップして実行し、新しいクラスを作成Playerしてディレクトリに保存しましたapp > models(読んだことから、ここから自動ロードされます):

player.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メソッドは引数を 0 として受け入れますが、2 つ送信すると爆発します。

これは、単に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 に答える