2010-02-05 57 views
2

我正在使用ActiveResource來使用REST服務。從服務的xml看起來像:使用ActiveResource將CamelCase xml/json轉換爲ruby命名屬性

<Person> 
    <FirstName>Kevin</FirstName> 
    <LastName>Berridge</LastName> 
</Person> 

ActiveResource解析這一點很好,但它使用名稱逐字。因此,模型類的樣子:

p = Person.find(1) 
p.FirstName 
p.LastName 

我更希望這是否會跟隨了Ruby命名約定,看起來像:

p = Person.find(1) 
p.first_name 
p.last_name 

確實的ActiveResource有辦法做到這一點?有沒有辦法可以掛鉤到ActiveResource並添加此?

回答

1

我不知道的快捷方式的方式來改變的ActiveResource名稱屬性,但可以實現method_missing與您的首選拼寫訪問現有的屬性:

def method_missing(name, *args, &block) 
    send name.to_s.classify.to_sym, *args, &block 
end 

或者,你也許能通過迭代attributes.keys並使用define_method來動態定義交替命名的方法,但我不確定何時在您的對象的生命週期中,您會這樣做(構造函數?)。

相關問題