我有一個ActiveRecord對象調用Foo
:紅寶石:動態調用可用的方法提高未定義的方法(元編程)
Foo.attribute_names.each do |attribute|
puts Foo.find(:all)[0].method(attribute.to_sym).call
end
在這裏,我呼籲這個模型中的所有屬性(即,查詢每個列的值)。 但是,有時候,我會得到一個未定義的方法錯誤。
ActiveRecord :: Base#attribute_names如何返回一個屬性名稱,該屬性名稱在轉換爲自己的方法調用時會引發未定義的方法錯誤?
請記住,這隻發生在某些對象只有某些方法。我無法識別一種模式。
謝謝。
我無法從您發佈的代碼中判斷出來,但是您可能要查看失敗的'attribute.to_sym'是什麼。此外,您可能已經知道這一點,但是'Foo.find(:all)[0]'是非常低效的 - 使用'Foo.first'來代替。 – igul222 2010-04-21 23:33:41
attribute.to_sym將屬性名稱轉換爲一個字符串(例如'author'爲符號'author')。符號是Object#方法函數接受的數據類型,原則上這隻適用於某些方法 此外,我知道數據庫查詢是可怕的,這不是我實際使用,它只是更容易讓其他人瞭解。 – user94154 2010-04-21 23:40:53