2011-08-02 16 views

Respuesta

11

Puede utilizar una cláusula select en su consulta Video.all, especificando los campos que desea incluir.

@videos = Video.select("id, name, title").all 

Además, no debería ser necesario llamar to_a en su consulta.

+2

Además, yo no creo que necesita el: todos en esta consulta – Jon

24

Haciéndolo de esta manera:

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 

usted puede encontrar más información sobre esto en the serialization documentation.

2

puede definir su propio método .to_xml dentro video.rb,

por ejemplo:

class Video < ActiveRecord::Base 

    def to_xml(opts={}) 
    opts.merge!(:only => [:id, :title]) 
    super(opts) 
    end 

end 

y luego llamar a respond_with(@videos) en ti controlador.

Ver esto similar question.

-1

una manera rápida sería utilizar : recojan, si sólo se devuelve una matriz de títulos (que supongo no: id), entonces esto sería muy rápido

def index 
    @titles = Video.pluck(:title) 

    respond_to do |format| 
    format.xml { render :xml => @titles } 
    format.json { render :json => @titles } 
    end 
end 

: desplumar será mucho más rápido que cualquiera de las otras opciones porque devuelve una matriz con solo los datos solicitados. No crea una instancia de un objeto ActiveRecord completo para cada fila de la base de datos. Debido a su rubí, esas instancias son las que toman la mayor parte del tiempo. También puede hacer:

@videos_ary = Video.pluck(:id, :title) 
response = @videos_ary.map {|va| { id: va[0], title: va[1] }} 

si usted no quiere conseguir su lápiz SQL, esto es bastante bueno

Cuestiones relacionadas