Rails: ¿Cómo descargar un documento subido anteriormente?

Necesito que mi usuario cargue documentos como anuncios pdf y txt en su perfil. Y lo hice usando Carrierwave, así que tengo una lista de documentos con títulos y direcciones URL.

Pero, ¿cómo puedo hacer que otros usuarios descarguen esos archivos? ¿Tengo que usar una gema o hay algo nativo que ni siquiera conozco ya que soy muy nuevo en los rieles?

Muchas Gracias

EDIT:

sociedad.rb

class Society < ActiveRecord::Base
  ...
  has_many :documents, :dependent => :destroy
end

documento.rb

class Document < ActiveRecord::Base
  belongs_to :society    
  mount_uploader :url, DocumentUploader    
end

Y luego esto en la vista Quiero descargar archivos:

  <% @society.documents.each do |doc| %>
    <%= link_to "Download it", doc.url %>    //url is the column name of the saved url
  <% end %>

preguntado el 27 de julio de 12 a las 15:07

Tal vez una pregunta estúpida: ¿qué hay de entregar las URL que mencionas a otros usuarios? -

Lo siento, no entiendo lo que quieres decir =) -

Ver la respuesta de @anthonyalberto. -

mmm lo hice (ver la pregunta editada) pero todavía me da errores. Sigo obteniendo el "método indefinido `model_name' para DocumentUploader: Class", lo cual es extraño ya que no estoy cargando nada.

3 Respuestas

No uso Carrierwave pero supongo que es similar a Paperclip.

Por lo tanto, deberías poder usar algo como esto.

 link_to 'Download file', user.file.url

Esto supone que tiene un objeto instanciado por el usuario de un Modelo con un atributo de onda portadora de 'archivo'. Reemplace esto con su nombre de atributo.

Respondido 27 Jul 12, 15:07

Lo intenté pero no funciona, estoy seguro de que estoy haciendo algo mal. Hice lo que dijiste (ver en la pregunta editada arriba) - bárbaro

Entonces intenta doc.url.url porque su atributo es 'url' y tiene que llamar al método 'url' en él. Con suerte, la 'url' no está reservada por carrierwave; de ​​lo contrario, cambie el nombre de su atributo mount_uploader: antonio alberto

Estoy usando la gema Carrierwave y cuando descargo el archivo, si ese nombre de archivo contiene espacio, entonces se convierte en guiones bajos. Entonces, ¿cómo eliminar ese guión bajo del nombre del archivo mientras lo descarga? - huzefa biyawarwala

Puede utilizar el send_file método para esto. Que podría parecerse a:

class MyController
  def download_file
    @model = MyModel.find(params[:id])
    send_file(@model.file.path,
          :filename => @model.file.name,
          :type => @model.file.content_type,
          :disposition => 'attachment',
          :url_based_filename => true)
  end
end

Consulte el enlace apidock para ver más ejemplos.

Respondido 27 Jul 12, 15:07

Estoy usando la gema Carrierwave y cuando descargo el archivo, si ese nombre de archivo contiene espacio, entonces se convierte en guiones bajos. Entonces, ¿cómo eliminar ese guión bajo del nombre del archivo mientras lo descarga? - huzefa biyawarwala

O puedes poner una etiqueta de anclaje:

en tu controlador:

@doc = "query to get the document name from your database"
@docpath = request.base_url+"/uploads/"+@doc

en tu opinión:

<a href="@docpath" download>Download File</a>.

Respondido 25 ago 19, 12:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.