我有一个ActiveRecord模型,我想转换为xml,但我不希望在xml中呈现所有属性.是否有一个参数可以传递给render方法以保持属性不在xml中呈现?
以下是我所谈论的一个例子.
def show
@person = Person.find(params[:id])
respond_to do |format|
format.xml { render :xml => @person }
end
end
Run Code Online (Sandbox Code Playgroud)
生成以下xml
<person> <name>Paul</name> <age>25</age> <phone>555.555.5555</phone> </person>
但是,我不希望显示手机属性.render方法中是否有一些参数排除了在xml中呈现的属性?有点像下面的例子
def show
@person = Person.find(params[:id])
respond_to do |format|
format.xml { render :xml => @person, :exclude_attribute => :phone }
end
end
Run Code Online (Sandbox Code Playgroud)
这将呈现以下xml
<person> <name>Paul</name> <age>25</age> </person>
Joh*_*ley 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
Run Code Online (Sandbox Code Playgroud)
我只是想知道同样的事情,我在模型层所做的更改,所以我也不会做控制器,只是另一种选择,如果你有兴趣.
模型
class Person < ActiveRecord::Base
def to_xml
super(:except => [:phone])
end
def to_json
super(:except => [:phone])
end
end
Run Code Online (Sandbox Code Playgroud)
调节器
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
Run Code Online (Sandbox Code Playgroud)
我在每个对象上为json和xml设置了其中一个,当我想从每个替代格式化的响应中过滤掉东西时,有点方便.关于这种方法的一个很酷的事情是,即使你收回一个集合,它也会调用这个方法并返回过滤后的结果.
归档时间: |
|
查看次数: |
5979 次 |
最近记录: |