1

所以我有一个这样的模型类:

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

甚至像这样在该模型中进行验证:

 validates :firstname, presence: true

请注意,它们都在变量名之前使用了那个“:”符号。

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

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

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

4

2 回答 2

3

你看,你传递给attr_accessor的实际上不是一个变量,而是一个变量的名称。变量的名称是一个符号,:name是符号的字面语法。在您的name方法中,您实际上使用的是一个变量,而不仅仅是它的名称,因此, no :​​。

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

于 2013-02-23T16:41:32.323 回答
1

将符号视为以“Rails 方式”表示某事的简单字符串。所以这与:

attr_accessible "email", "firstname", "lastname", "phones_attributes"

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

于 2013-02-23T16:49:41.697 回答