Rails - 为什么不在模型类中使用@符号?

时间:2013-05-29 23:07:34

标签: ruby-on-rails ruby models

铁杆新手。我无法理解为什么我使用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

3 个答案:

答案 0 :(得分:2)

  

从哪个类得到分数变量?

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

HighScore.new.methods

您应该看到两种方法,scorescore=

  

@符号是否意味着实例变量

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

  

这是我应该在课程中使用的

不一定。大多数情况下,您应该使用访问器方法。这就是它们的用途。

答案 1 :(得分:2)

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

答案 2 :(得分:1)

attr_accessor :score实际上是

def score
  @score
end

def score=(value)
  @score = value
end

所以你可以使用@score,但是如果没有像@score那样在课堂外访问myHighScore.@score那么愚蠢。