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] }}