gpt4 book ai didi

ruby-on-rails - 使用 ActiveRecord::Serialization.to_xml 构建动态字段

转载 作者:数据小太阳 更新时间:2023-10-29 02:38:17 24 4
gpt4 key购买 nike

我很好奇人们使用 AR 的 to_xml() 从 Controller 构建非实体字段(例如,不是您正在序列化的模型的属性,而是可能在流程中利用属性)的体验。

to_xml 似乎为此提供了一些选项。

一种是传递对被操作对象的方法的引用:在序列化过程中,调用这些方法并将它们的结果添加到生成的文档中。我想避免这条路径,因为一些生成的数据虽然取决于对象的属性,但可能超出模型本身的范围——例如,为特定项目“显示”操作构建 URL。另外,它需要太多的深思熟虑。我希望能够通过调整来自 Controller 的 to_xml 代码来更改生成的文档。我也不想在对象中声明方法的麻烦。

覆盖每个对象中的 to_xml 也是如此。

其他两个选项似乎更符合要求:一个是在生成这些字段的序列化选项中传递 procs,另一个是传递一个 block ,该 block 将在序列化对象属性后产生。它们提供了我正在寻找的那种调用点定制,此外,它们的声明将范围绑定(bind)到 Controller ,以便它们可以访问与 Controller 相同的内容,但是这些方法似乎非常有限:AFAICT 它们不包含对被序列化的对象的引用。它们包含对构建器对象的引用,我猜你可以在 block /过程中解析并找到已经序列化的属性并使用它们,但这是一个长篇大论,或者至少是不安和次优的。

如果我在这里错了请纠正我,但是如果您必须访问对象本身,那么在序列化一个或多个对象时提供可用的过程/ block 有什么意义。

无论如何,请告诉我我哪里错了,因为看起来我一定是忽略了这里的某些东西。

哦,是的,我知道我可以写下我自己的观点。我正在尝试利用 respond_to 和 to_xml 来实现最少的额外文件/行。 (不过,当我不知道如何使用 AR 的序列化来做到这一点时,我就采用了这种方法。)

**编辑 3.29.09——我刚刚向 Rails 提交了一个补丁。如果您有兴趣,请提供一些支持:) https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/2373-record-sensitive-procs-for-to_xml

最佳答案

实际上,Proc 传递给您传递给 to_xml 的相同选项散列(减去 procs 选项)。因此,您可以传入 Proc 完成其工作所需的任何额外对象:

proc = Proc.new {|options| options[:builder].tag!('reverse-name', options[:object].name.reverse)}
object.to_xml :object => object, :procs => [ proc ]

由于您获得的 proc 获得了与 to_xml 相同的选项,因此这允许您传递所需的任何选项。

关于ruby-on-rails - 使用 ActiveRecord::Serialization.to_xml 构建动态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/260668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com