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

班级从哪里获得分数变量?

首先,既然没有局部变量score,那么它就是一个方法score。对应的 DB 表中必须有一列score。ActiveRecord 读取模式并为每一列创建 getter 和 setter 方法(动态地,在运行时)。尝试这个:

HighScore.new.methods

你应该看到有两种方法,scorescore=

@ 符号不是表示实例变量吗

是的,它确实表示一个局部变量

这是我应该在课堂上使用的

不必要。大多数时候,您应该使用访问器方法。这就是他们的目的。

于 2013-05-29T23:11:21.483 回答
2

当您需要在方法之外访问该变量时,您可以使用@,但在您的情况下,我认为 score 是一个模型属性,这就是它没有@的原因。

于 2013-05-29T23:12:11.540 回答
1

attr_accessor :score有效地

def score
  @score
end

def score=(value)
  @score = value
end

所以你可以使用@score,但你不能没有@score像在myHighScore.@score.

于 2013-05-29T23:19:15.207 回答