我有一个名为Foo
的Activerecord对象:
Foo.attribute_names.each do |attribute|
puts Foo.find(:all)[0].method(attribute.to_sym).call
end
这里我调用此模型的所有属性(即查询每个列值)。 但是,有时候,我会得到一个未定义的方法错误。
ActiveRecord :: Base#attribute_names如何返回一个属性名称,当转换为自己的方法调用时会引发未定义的方法错误?
请记住,这仅适用于某些特定方法的某些对象。我无法识别模式。
谢谢。
答案 0 :(得分:2)
NoMethodError应该告诉你哪个对象不存在哪个方法。您的find
可能没有返回记录吗?在这种情况下,[][0]
为nil
,您肯定会获得NoMethodError
。
我会使用.fetch(0)
代替[0]
,如果没有索引为0的元素,您将获得KeyError
。
注意:不需要to_sym
;所有内置方法都接受名称方法作为字符串或符号(均在1.8和1.9中)
答案 1 :(得分:0)
也许与访问有关?就像一个类有一个attr_protected
属性,或类似的东西。或者对于不是数据库列的属性,没有定义访问器?