【问题标题】:Why to_xml on ActiveResource does not work well?为什么 ActiveResource 上的 to_xml 不能正常工作?
【发布时间】:2009-09-08 07:42:17
【问题描述】:

我的项目中有几个 ActiveResource 模型。当我在 ActiveResource 上调用 to_xml 时,我感到很奇怪。我传递给 to_xml 的选项,例如 :only 和 :except 根本不起作用。在 ActiveRecord 上,它工作得非常好。有谁知道吗?

class Node < ActiveResource::Base
   self.site = NODE_SERVER
end

# node has uuid, name, type attributes
node = Node.find("3333")
node.to_xml(:only => [:uuid])

# after here, i still get all attributes

【问题讨论】:

  • to_xml 返回一个 xml 字符串...你对结果做了什么?
  • 我会把它发回给客户。

标签: ruby-on-rails activeresource


【解决方案1】:

ActiveResource::Base#to_xml 的实现与 ActiveRecord::Base 不同。

http://api.rubyonrails.org/classes/ActiveResource/Base.html#M000914

ActiveResource::Base#to_xml 只接受 :indent, :dasherize, :camelize and :skip_instruct.

【讨论】:

  • 我不认为实现是不同的。从我的角度来看,它只会调用 activeresource 对象的 attributes.to_xml (这是一个哈希对象)。此外,to_xml 带有 ActiveSupport。如果您尝试在哈希上调用 to_xml,您会看到,它也不起作用。
  • 不,实现方式不同。 ARecord::Base.to_xml 使用 XmlSerializer,而 AResource::Base.to_xml 使用完全不同的序列化方法。此外,两种实现都接受不同的选项,如 Rails API 文档中所述。换句话说,RTFM :)。
【解决方案2】:

ActiveRecordActiveResource 上的 to_xml 方法是独立的实现。这意味着您不能期望它们的行为完全相同或采用相同的参数。

【讨论】:

    【解决方案3】:

    你说“在这里之后,我仍然获得所有属性”。看起来您认为node.to_xml 会改变node 本身,但事实并非如此。你必须这样做

    xml = node.to_xml(:only => [:uuid])
    

    然后参考xml

    【讨论】:

    • 没有。我的意思是 to_xml 仍然返回所有属性。你试过了吗?
    猜你喜欢
    • 2016-07-16
    • 2019-01-04
    • 2020-09-03
    • 2016-10-10
    • 2016-10-24
    • 2017-02-27
    • 2017-07-08
    • 2014-11-23
    • 2021-03-07
    相关资源
    最近更新 更多