铁杆新手。我无法理解为什么我使用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
答案 0 :(得分:2)
从哪个类得到分数变量?
首先,由于没有局部变量score
,因此它是一个方法score
。相应的DB表中必须有一列score
。 ActiveRecord读取模式并为每列创建getter和setter方法(动态地,在运行时)。试试这个:
HighScore.new.methods
您应该看到两种方法,score
和score=
。
@符号是否意味着实例变量
是的,它确实表示一个局部变量
这是我应该在课程中使用的
不一定。大多数情况下,您应该使用访问器方法。这就是它们的用途。
答案 1 :(得分:2)
当您需要在方法之外访问该变量时,您可以使用@,但在您的情况下,分数是我认为的模型属性,这就是没有@的原因。
答案 2 :(得分:1)
attr_accessor :score
实际上是
def score
@score
end
def score=(value)
@score = value
end
所以你可以使用@score,但是如果没有像@score
那样在课堂外访问myHighScore.@score
那么愚蠢。