使用ActiveResource将CamelCase xml / json转换为ruby命名属性

时间:2010-02-05 17:47:27

标签: ruby-on-rails xml activeresource camelcasing

我正在使用ActiveResource来使用REST服务。服务中的xml如下所示:

<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 个答案:

答案 0 :(得分:1)

我不知道如何快速更改ActiveResource命名属性的方式,但您可以使用首选拼写实现method_missing来访问现有属性:

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

或者,您可以通过迭代attributes.keys并使用define_method动态定义交替命名的方法,但我不确定何时在对象的生命中你会做那个(构造函数?)。