gpt4 book ai didi

ruby-on-rails - 在 Rails 的 to_xml 中过滤深度关联

转载 作者:数据小太阳 更新时间:2023-10-29 01:59:08 25 4
gpt4 key购买 nike

我有一个具有许多角色的 Person 对象。反过来,角色属于应用程序。我正在使用以下代码将这种深层关系呈现到 XML 中:

format.xml { render :text => @person.to_xml( :include => { :roles => { :include => :application } } ) }

渲染出这样的东西:

<person>
<email>****@****.edu</email>
<first>Christopher</first>
<last>****</last>
<loginid>****</loginid>
<roles type="array">
<role>
<application-id type="integer">3</application-id>
<name>Access</name>
<application>
<name>****</name>
</application>
</role>
<role>
<application-id type="integer">2</application-id>
<name>Create Ballots</name>
<application>
<name>****</name>
</application>
</role>
</roles>
</person>

这可行,但是,我想过滤它显示的应用程序和角色。我只想显示 application_id 是某个整数的角色(因此,嵌套在它们中的应用程序)。例如,如果我只查找 application_id == 3,则输出如下:

<person>
<email>****@****.edu</email>
<first>Christopher</first>
<last>****</last>
<loginid>****</loginid>
<roles type="array">
<role>
<application-id type="integer">3</application-id>
<name>Access</name>
<application>
<name>****</name>
</application>
</role>
</roles>
</person>

在此先感谢您提供的任何帮助。

最佳答案

也许一种方法是覆盖您的角色 to_xml 方法。它看起来像以下(大约):

在您的角色模型中:

def to_xml(options={})
if application.id != 3
options[:indent] ||= 2
xml = options[:builder] ||= Builder::XmlMarkup.new(:indent => options[:indent])
xml.instruct! unless options[:skip_instruct]
xml.role do
# role_application is the application linked to you role..
role_application = applications.select {|a| a.id == 3}
xml.application_id role_applications.id
xml.name role_application.name
xml.application do
xml.name role_application.name
end
end
else
# return nothing
return ""
end
end

结束

你会这样调用它:

format.xml { render :text => @person.to_xml( :include => { :roles => {} } )

(查看此 page 末尾的文档)

关于ruby-on-rails - 在 Rails 的 to_xml 中过滤深度关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6949227/

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