类语法,当我们需要或不需要符号时?

时间:2013-02-23 16:33:04

标签: ruby-on-rails ruby

所以我有一个像这样的Model类:

attr_accessible :email, :firstname, :lastname, :phones_attributes

甚至在该模型中的验证如下:

 validates :firstname, presence: true

请注意,所有这些都在变量名称之前使用了“:”符号。

但是在那个模型中我有一个像这样的方法:

  def name
    [firstname, lastname].join(' ')
  end

那么为什么我们不需要在变量名之前输入那些“:”呢?有什么不同?

2 个答案:

答案 0 :(得分:3)

你知道,传递给attr_accessor的内容实际上并不是变量,而是变量的名称。变量的名称是符号,:name是符号的文字语法。在name方法中,您实际上使用的是变量,而不仅仅是它的名称,因此没有:

更详细地说,attr_accessor永远不会直接使用变量。相反,它使用的方法是按名称获取变量。因此,它需要名称,而不是变量。

答案 1 :(得分:1)

将符号看作简单的字符串,以“Rails的方式”表示某些内容。所以这与:

相同
attr_accessible "email", "firstname", "lastname", "phones_attributes"

但是在实例方法name中,firstname和lastname实际上被理解为model_object.firstnamemodel_object.lastname等。因此,没有冒号。