Мне назвали объект Activerecord Foo
:
Foo.attribute_names.each do |attribute|
puts Foo.find(:all)[0].method(attribute.to_sym).call
end
Здесь я называю все атрибуты на этой модели (т.е., запрашивая для каждого значения столбца). Однако иногда я получу ошибку неопределенного метода.
Как может ActiveRecord:: Base#attribute_names возвращают название атрибута, которое при преобразовании в его собственный вызов метода повышает ошибку неопределенного метода?
Следует иметь в виду, что это только происходит на определенных объектах только для определенных методов. Я не могу определить шаблон.
Спасибо.
NoMethodError должен сообщать вам, какой метод не существует для какого объекта. Возможно ли, что ваш find
не вернет записи? В этом случае [][0]
равно nil
, и вы обязательно получите NoMethodError
.
Я бы использовал .fetch (0)
вместо [0]
, и вы получите KeyError
, если когда-либо не будет элемента с индексом 0.
Примечание: нет необходимости в to_sym
; все встроенные методы принимают методы имен в виде строк или символов (как в 1.8, так и в 1.9)
Может что-то делать с доступом? Например, если у класса есть атрибут attr_protected
или что-то в этом роде. Или для атрибутов, которые не являются столбцами базы данных, для которых не определены средства доступа?