вы должны использовать
my_object[1].id
«id» - это метод экземпляра, сгенерированный rails в классе MyModel, и у него есть соответствующий метод экземпляра «id =» setter (да, это метод)
в другой руке
my_object[1][:id] or my_object[1]["id"]
получит прямой доступ к хешу @attributes:
def read_attribute(attr_name)
attr_name = attr_name.to_s
if !(value = @attributes[attr_name]).nil?
......
end
Я бы хотел, чтобы вы увидели этот код
def [](attr_name)
read_attribute(attr_name)
end
my_object[1][:id]
Если вы видите подпись метода [], возможно, вы подумаете, что можете вызвать метод следующим образом:
my_object[1][](:id)
но вы не можете этого сделать, потому что Ruby делает некоторые хитрости за кулисами, чтобы он выглядел так же, как если бы вы обращались к обычному массиву (как это делают php, js и т. Д.), Не запутайтесь. 1018 *