Ruby on rails 限制rails控制器响应中的特定字段
我有一个控制器动作像Ruby on rails 限制rails控制器响应中的特定字段,ruby-on-rails,controller,Ruby On Rails,Controller,我有一个控制器动作像 def index @videos = Video.all.to_a respond_to do |format| format.xml { render :xml => @videos } format.json { render :json => @videos } end end 视频具有属性名称和标题 我希望返回的xml只包含标题 如何限制其响应。您可以在视频上使用选择子句。所有查询,指定要包含的字段 @videos
def index
@videos = Video.all.to_a
respond_to do |format|
format.xml { render :xml => @videos }
format.json { render :json => @videos }
end
end
视频具有属性名称
和标题
我希望返回的xml只包含标题
如何限制其响应。您可以在
视频上使用选择
子句。所有
查询,指定要包含的字段
@videos = Video.select("id, name, title").all
此外,您不需要在查询时调用来执行a
。这样做:
def index
@videos = Video.all
respond_to do |format|
format.xml { render :xml => @videos.to_xml( :only => [:title] ) }
format.json { render :json => @videos.to_json( :only => [:title] ) }
end
end
您可以在中找到有关此的详细信息。您可以在
video.rb
中定义自己的.to_xml
方法
e、 g:
class-Video[:id,:title])
超级(opts)
结束
结束
然后用(@videos)在控制器中调用response\u
看看这个。一个快速的方法是使用:pull,如果您只是返回一个标题数组(我猜是no:id),那么这将非常快
def index
@titles = Video.pluck(:title)
respond_to do |format|
format.xml { render :xml => @titles }
format.json { render :json => @titles }
end
end
:Pull将比任何其他选项都快,因为它返回的数组中只包含请求的数据。它不会为每个数据库行实例化整个ActiveRecord对象。因为是ruby,这些实例化占用了大部分时间。您还可以执行以下操作:
@videos_ary = Video.pluck(:id, :title)
response = @videos_ary.map {|va| { id: va[0], title: va[1] }}
如果您不想取出SQL铅笔,这也很好,我相信您不需要在这个查询上输入:all
@videos_ary = Video.pluck(:id, :title)
response = @videos_ary.map {|va| { id: va[0], title: va[1] }}