0

レール初心者。次の例score > 50ではなく、なぜ使用するのか理解できません。記号は、クラスで使用する必要があるインスタンス変数を意味@score > 50しませんか?@

クラスはどこscoreから変数を取得していますか? @?が前に付いていなければ、ローカルと見なされるという印象を受けました。

class HighScore < ActiveRecord::Base

  attr_accessible :game, :score
  validate :verify_inputs

  def verify_inputs

    # Why is this line not @score > 50??
    if score > 50
      errors.add( :score, 'Custom error message. Score cannot be more than 50' )
    end
  end
end
4

3 に答える 3

2

メソッドの外部でその変数にアクセスする必要がある場合は @ を使用できますが、あなたの場合、スコアはモデル属性であると思います。そのため、@ はありません。

于 2013-05-29T23:12:11.540 に答える
2

クラスはどこからスコア変数を取得していますか?

まず、ローカル変数がないのでscoreメソッドscoreです。score対応する DB テーブルに列が存在する必要があります。ActiveRecord はスキーマを読み取り、すべての列の getter メソッドと setter メソッドを作成します (実行時に動的に)。これを試して:

HighScore.new.methods

scoreとの 2 つのメソッドが表示されるはずscore=です。

@ 記号はインスタンス変数を意味しませんか

はい、ローカル変数を意味します

これは私がクラスで使うべきものです

必ずしも。ほとんどの場合、アクセサ メソッドを使用する必要があります。それが彼らの目的です。

于 2013-05-29T23:11:21.483 に答える
1

attr_accessor :score効果的に

def score
  @score
end

def score=(value)
  @score = value
end

@score を使用することもできますが@scoremyHighScore.@score.

于 2013-05-29T23:19:15.207 に答える