Necesitamos tener tres plugins instalados:
- ajax_scaffold generator: para generar las tablas y los formularios.
- acts_as_attachment: para manejo automágico de archivos.
- respond_to_parent: para ejecutar los ficheros rjs desde un iframe en la ventana padre.
Una vez instalados los tres plugins, lo primero es generar el ajax_scaffold que necesitemos
>ruby script/generate ajax_scafold [my_table]
Con ello se genera automáticamente y, entre otras cosas, el controlador, el modelo y las vistas necesarias para el funcionamiento del ajax_scaffold.
En el modelo, añadiremos una línea similar a ésta
acts_as_attachment :storage => :file_system, :file_system_path => "[path_to_my_files]"
en el que indicamos al sistema que este tipo de registros llevan asociado un fichero.
Además es necesario modificar la tabla asociada como indica este link. En general, añadiendo estas cinco filas a la tabla mediante migration es suficiente:
add_column :my_table, :content_type, :string
add_column :my_table, :filename, :string
add_column :my_table, :size, :integer
add_column :my_table, :parent_id, :integer
add_column :my_table, :thumbnail, :string
En el partial _new_edit.rhtml hemos de cambiar el formulario para que no ejecute una llamada ajax sino un envío post.
<%= form_tag (
url_for(@options.merge(:controller => '/[my_controller]')),
{:id => element_form_id(@options), :target => 'hiddenIframe', :multipart => true } )%>
Además, hay que añadir un iframe oculto que reciba la petición.
<div style="OVERFLOW: hidden; WIDTH: 0px; HEIGHT: 0px">
<iframe id="hiddenIframe" name="hiddenIframe" src="" width="0" height="0"></iframe>
<div>
Finalmente, en el controlador es necesario hacer que tras la actualización de datos se ejecute el archivo rjs que corresponda teniendo en cuenta que no se recibe una llamada ajax (xhr?).
responds_to_parent do
render :action => '[my_action].rjs'
end
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario