我正在使用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并添加它?
答案 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
动态定义交替命名的方法,但我不确定何时在对象的生命中你会做那个(构造函数?)。