Menu
abriraqui
  • reflexiones
  • publicaciones
  • hackership
  • experiencias
abriraqui

Rails: Chuleta para crear y descargar un fichero

Posted on August 26, 2008July 27, 2009

Tweet

En estos días he tenido que crear un fichero a partir de unos formularios, guardarlos y dar la opción de descargarlo.

Pongo la chuleta por aquí, porque luego se me olvida O:-)

En el controller creo el método siguiente para crear el fichero


def generate_afile
@project =Project.find(params[:id])
@language = Language.find(params[:lang])
#Composing the file name
@afile=@project.name+ "-" + @language.language+".txt"

#Creating the query for extraction just the info needed
@translations = Translation.find(:all, :conditions => {:project_id => @project.id, :language_id => @language.id})

#Writing the file
temp_file = File.new(“#{RAILS_ROOT}/tmp/”+@afile, “w”)
File.open(“#{RAILS_ROOT}/tmp/”+@afile, “w”) do |file|
for t in @translations
pofile= ‘msgid “‘+t.message.name + ‘”‘ + “\n”+’msgstr “‘+t.translation+'”‘+”\n”
file.write(pofile)
end
end
end

Y a continuación del anterior, creo el método para descargar el fichero, y que será al que llame desde la vista


def download_file
generate_pofile
send_file "#{RAILS_ROOT}/tmp/"+ @pofile, :filename => @pofile
end

En la vista pongo lo siguiente

<h3><%=  link_to "Download file", {:action => 'download_file', :id => @project.id, :lang => @language.id}  %></h3>

Pues esto es todo y así se lo hemos contado

2 thoughts on “Rails: Chuleta para crear y descargar un fichero”

  1. Jaime Iniesta says:
    August 31, 2008 at 7:23 am

    Pues mola. Casi que lo podías hacer directamente todo en un sólo método, no?

    Otra idea sería dejarlo en 2 métodos pero desde download_file llamar a generate_file sólo en caso de que no exista el fichero: así puedes tener algo de cache, es decir, sólo generas el fichero la primera vez y en las sucesivas llamadas te basta con devolverlo. Creo que puedes comprobar con FileTest.exists?(nom_fichero)… más info aquí:

    http://paulsturgess.co.uk/articles/show/36-how-to-check-if-a-file-exists-in-ruby-on-rails

    Claro que si cambian los contenidos de la base de datos puede ser necesario regenerar el fichero… esto lo puedes hacer con un Sweeper que vigile los modelos y en caso de modificaciones, borre los ficheros correspondientes.

  2. carolina says:
    August 31, 2008 at 1:49 pm

    En principio genero cada vez el fichero porque cambia con mucha frecuencia. Miraré el Sweeper para ver si puedo hacer un control de ficheros.

Comments are closed.

©2023 abriraqui | Powered by SuperbThemes & WordPress