instance_name [:column_name]和instance_name.column_name之间有什么区别?

时间:2010-12-05 00:55:57

标签: ruby-on-rails

我是Rails的新手。我发现下面的两种方法得到了相同的结果,但我无法理解代码。

[ ]应该是数组的运算符,对吗?为什么我可以通过以下方式使用它:

代码1:

drummer = Drummer.find(1)
drummer[:name]
=>"Jojo Mayer"

代码2:

drummer = Drummer.find(1)
drummer.name
=> "Jojo Mayer"

2 个答案:

答案 0 :(得分:3)

没有区别。 ActiveRecord:基本实例方法[]只调用read_attribute,它返回相同的值。

[]方法的目的是允许使用变量传递属性名称,例如:

key = :name
drummer[key]
   =>"Jojo Mayer"

答案 1 :(得分:1)

实际上有一个重要的区别。

如果你需要通过覆盖setter来对值进行某种处理:

class Drummer
  def name= value
    self[:name] = value.capitalize
  end
end

然后鼓手[:name]允许你绕过覆盖。