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

发布于 2024-08-20 14:10:40 字数 491 浏览 7 评论 0原文

我正在使用 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 并添加它?

I'm using ActiveResource to consume a REST service. The xml from the service looks like:

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

ActiveResource parses this just fine, but it uses the names verbatim. So the model class will look like:

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

I would much prefer if this would follow the Ruby naming conventions and look like:

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

Does ActiveResource have a way to do this? Is there a way I can hook into ActiveResource and add this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

素染倾城色 2024-08-27 14:10:40

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

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

或者,您也许可以定义交替命名的属性通过迭代 attributes.keys 并使用 define_method 动态地调用方法,尽管我不确定在对象的生命周期中何时会这样做(构造函数?)。

I don't know of a quick way to change the way ActiveResource names attributes, but you can implement method_missing to access the existing attributes with your preferred spellings:

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

Alternatively, you might be able to define alternately-named methods dynamically by iterating through attributes.keys and using define_method, though I'm not sure when in your object's life cycle you would do that (constructor?).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文