Hola,
@archive.update_attributes({:state_id => State.find(:first,
:conditions => [“name = ?”, “Bloqueado”]), :user_id => current_user.id})
respond_to do |format|
format.html { send_file("public/" + @archive.public_filename,
:type => @archive.content_type) if previous_state == “Desbloqueado” }
Cambia el estado de un archivo y lo envÃa (si antes no estaba
bloqueado).
ten cuidado con eso. Si no me equivoco, cambias el estado siempre, esté
bloqueado por otro usuario o no, asà que si estaba ya bloqueado por otro
lo estás dejando marcado como bloqueado por el usuario actual aunque no
se lo descargue (eso lo arreglas metiendo el update_attributes dentro
del if)
La cuestión es que después de que envÃe el archivo necesito que refresque la página para que muestre el nuevo estado pero no se me ocurre como hacerlo.
si no me equivoco, esto está complicado porque a una petición HTTP sólo
le puedes mandar una respuesta, asà que si envÃas el archivo, en la
misma petición no puedes hacer más.
Lo que sà podrÃas hacer es jugar un poco con javascript para conseguir
ese efecto. Por ejemplo podrÃas hacer que al hacer la petición, si el
usuario tiene permiso se pinta la página de respuesta que querÃas pero
con una llamada en el onload (o al final del javascript) para que llame
a la acción que hace realmente el sendfile.
como ejemplo
Con eso haces el submit del form que va a ir a por tu documento, y como
le ponemos target=_BLANK, el contenido de la vista que acabas de pintar
no cambiarÃa. Siempre puedes incluir un bloque por si alguien
no tiene javascript y quieres proporcionar un link en ese caso (antes de
que se me queje nadie por la accesibilidad de la solución
)
saludos,
javier ramÃrez