0

私はレールの初心者で、モデルにコードを入れようとしています。以下のコードは図です。

意見:

Player_stats: <%= @player.player_pass_completion_ratio %>

モデル:

class Player < ActiveRecord::Base
 has_many :lefthandstats
 has_many :righthandstats

def player_pass_completion_ratio
 Hands = [ lefthandstats, righthandstats] #These are objects & calling   @player.lefthandstats.find_with_passes directly generally works

 if self.category ==  "Hands"
  total_usual_passes = 500
  Hands.each do |cmethod|
    if self.cmethod.find_with_passes(:passes, :first, {:conditions => 'passes>200' })   then accuratestats += 1 end
  end
 end

accuracy = (accuratestats/total_usual_passes)*100
end

ビューからコードを呼び出そうとすると、未定義のメソッド「cmethod」が表示されます。どんなアドバイスでも大歓迎です。

4

4 に答える 4

2

ruby のコメントでは#文字を使用し、//

于 2013-02-27T14:09:50.670 に答える
1

「self.cmethod」を取り除き、「cmethod」のみを使用します

if cmethod.find_with_passes....

ブロック「cmethod」のスコープでは、単なるローカル変数です。その前に self を置くことで、Ruby は、それを含むクラス インスタンスでメソッドを呼び出していると想定しました。

于 2013-02-27T14:09:22.597 に答える
1

コードは を呼び出しています。これは、オブジェクト (存在しない)self.cmethodのメソッドを呼び出そうとします。cmethod

あなたがやろうとしていることは、次のようなものだと思います。

hands = [:lefthandstats, :righthandstats]
hands.each do |cmethod|
  self.send(cmethod).... #rest of your code goes here
end

lefthandstatsこれにより、オブジェクトのandrighthandstatsメソッドが動的に呼び出されます。

于 2013-02-27T14:11:04.740 に答える
0

まず、akofink で言及されているように、コードをコメントするために使用する rails のように、コードを置き換えてコードを修正します//##

次に、コードのコンテキストでこれを検討してください。

@result = Player.all

@result.each do |player|

player.name

end

ここで@resultは、プレーヤーのコレクションを返します。@result.eachそのため、プレーヤーとしての各結果に対して、各プレーヤーの名前を取得するようなループを使用できます。

上記の内容を理解した上でコードを修正してください。

于 2013-02-27T14:15:12.633 に答える