当前位置:  开发笔记 > 前端 > 正文

从rails中的xml渲染中排除一些ActiveRecord属性

如何解决《从rails中的xml渲染中排除一些ActiveRecord属性》经验,为你挑选了2个好方法。

我有一个ActiveRecord模型,我想转换为xml,但我不希望在xml中呈现所有属性.是否有一个参数可以传递给render方法以保持属性不在xml中呈现?

以下是我所谈论的一个例子.

def show
  @person = Person.find(params[:id])
  respond_to do |format|
    format.xml { render :xml => @person }
  end
end

生成以下xml


  Paul
  25
  555.555.5555

但是,我不希望显示手机属性.render方法中是否有一些参数排除了在xml中呈现的属性?有点像下面的例子

def show
  @person = Person.find(params[:id])
  respond_to do |format|
    format.xml { render :xml => @person, :exclude_attribute => :phone }
  end
end

这将呈现以下xml


  Paul
  25

John Topley.. 14

您可以将一组模型属性名称传递给:only:except选项,因此对于您的示例,它将是:

def show
  @person = Person.find(params[:id])
  respond_to do |format|
    format.xml { render :text => @person.to_xml, :except => [:phone] }
  end
end

to_xml文档


efleming.. 7

我只是想知道同样的事情,我在模型层所做的更改,所以我也不会做控制器,只是另一种选择,如果你有兴趣.

模型

class Person < ActiveRecord::Base
 def to_xml
  super(:except => [:phone])
 end
 def to_json
  super(:except => [:phone])
 end
end

调节器

class PeopleController < ApplicationController
  # GET /people
  # GET /people.xml
  def index
    @people = Person.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @people }
      format.json  { render :json => @people }
    end
  end
end

我在每个对象上为json和xml设置了其中一个,当我想从每个替代格式化的响应中过滤掉东西时,有点方便.关于这种方法的一个很酷的事情是,即使你收回一个集合,它也会调用这个方法并返回过滤后的结果.



1> John Topley..:

您可以将一组模型属性名称传递给:only:except选项,因此对于您的示例,它将是:

def show
  @person = Person.find(params[:id])
  respond_to do |format|
    format.xml { render :text => @person.to_xml, :except => [:phone] }
  end
end

to_xml文档



2> efleming..:

我只是想知道同样的事情,我在模型层所做的更改,所以我也不会做控制器,只是另一种选择,如果你有兴趣.

模型

class Person < ActiveRecord::Base
 def to_xml
  super(:except => [:phone])
 end
 def to_json
  super(:except => [:phone])
 end
end

调节器

class PeopleController < ApplicationController
  # GET /people
  # GET /people.xml
  def index
    @people = Person.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @people }
      format.json  { render :json => @people }
    end
  end
end

我在每个对象上为json和xml设置了其中一个,当我想从每个替代格式化的响应中过滤掉东西时,有点方便.关于这种方法的一个很酷的事情是,即使你收回一个集合,它也会调用这个方法并返回过滤后的结果.

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有