2010-12-05 5 views
0

Я новичок в Rails. Я обнаружил, что два способа ниже получают одинаковый результат, но я не могу понять код.В чем разница между instance_name [: column_name] и именем экземпляра.column_name?

[ ] должен быть оператором для массива, правильно? Почему я могу использовать его следующим образом:

Код 1:

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

код 2:

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

ответ

1

На самом деле есть важное различие.

Если вам нужно сделать какое-то обработку на величине переопределения сеттера:

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

Затем барабанщик [: имя] позволяет обойти переопределение.

3

Там нет никакой разницы. ActiveRecord: метод базового экземпляра [] просто вызывает read_attribute, который возвращает одно и то же значение.

Цель [] метода является то, чтобы разрешить прохождение имени атрибута с переменным, например .:

key = :name 
drummer[key] 
    =>"Jojo Mayer" 
Смежные вопросы