所以我有一个像这样的Model类:
attr_accessible :email, :firstname, :lastname, :phones_attributes
甚至在该模型中的验证如下:
validates :firstname, presence: true
请注意,所有这些都在变量名称之前使用了“:”符号。
但是在那个模型中我有一个像这样的方法:
def name
[firstname, lastname].join(' ')
end
那么为什么我们不需要在变量名之前输入那些“:”呢?有什么不同?
答案 0 :(得分:3)
你知道,传递给attr_accessor
的内容实际上并不是变量,而是变量的名称。变量的名称是符号,:name
是符号的文字语法。在name
方法中,您实际上使用的是变量,而不仅仅是它的名称,因此没有:
。
更详细地说,attr_accessor
永远不会直接使用变量。相反,它使用的方法是按名称获取变量。因此,它需要名称,而不是变量。
答案 1 :(得分:1)
将符号看作简单的字符串,以“Rails的方式”表示某些内容。所以这与:
相同attr_accessible "email", "firstname", "lastname", "phones_attributes"
但是在实例方法name
中,firstname和lastname实际上被理解为model_object.firstname
,model_object.lastname
等。因此,没有冒号。