2010-06-08 16 views
5

Uso link_to_remote para extraer los contenidos dinámicos de un parcial en la página. Básicamente es una larga fila de una base de datos de "todo" para el día.¿cómo puedo almacenar en caché un parcial recuperado a través de link_to_remote en rieles?

Para que la persona los revise, quiero mostrar la lista actualizada con una línea entre los que están terminados.

Actualmente, termino necesitando hacer clic en el link_to_remote nuevamente después de que un elemento está marcado, pero me gustaría redirigirlo a la página "en caché" de cosas por hacer, pero con el elemento alineado.

¿Cómo puedo hacer eso?

Aquí es la vista principal:

<% @campaigns.each do |campaign| %> 
<!--link_to_remote(name, options = {}, html_options = nil)--> 

<tr><td> <%= link_to_remote(campaign.name, :update => "campaign_todo", 
     :url => {:action => "campaign_todo", 
       :id => campaign.id 
      } 
     ) %> </td></tr> 


<% end %> 
</table> 

<div id="campaign_todo"> 


</div> 

me gustaría cuando el New/crear acciones se realizan para volver a la página que redirige allí.

Cuando alguien quiere "hacer" una tarea, los lleva a la nueva acción. aquí es el controlador:

def create 
    @contact_call = ContactCall.new(params[:contact_call]) 


    if @contact_call.save 
     flash[:notice] = "Successfully created contact call." 
     redirect_to contact_path(@contact_call.contact_id) 
    else 
     render :action => 'new' 
    end 
    end 

que me pasa a redirect_to: de nuevo, lo que me lleva de nuevo a la vista principal se muestra arriba ... pero sin la PARCIAL. Significa que necesito volver a cargar el parcial de nuevo, que es una llamada a la base de datos que consume mucho tiempo.

1) ¿Es posible volver a una vista que tiene una llamada parcial a través de AJAX y aún así tener esos resultados? 2) ¿Puede ese resultado, sin embargo, estar marcado a través de CSS para indicar que ha sido "marcado"?

Respuesta

0

usted tiene que crear una llamada AJAX cuando marca un artículo como 'Hecho', en esta acción que tendrá que

  1. actualización de su elemento de la lista para añadir la 'línea-a través de' al texto -Decoración
  2. crear un método como 'after_save', a punto de expirar su caché

se puede leer acerca de la CSS 'tachado' aquí: http://www.icelab.eu/en/blog/css-4/xhtml-and-css-strike-alternatives-86.htm

y la documentación de expire_page y expire_action está aquí: http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

+0

gracias ... Creo que necesito actualizar la pregunta más ... – Angela

0

creo que puede ser capaz de utilizar el almacenamiento en caché de acción de su acción index, o cualquiera que sea el nombre de la acción es que hace que su página principal.

También puede hacer el almacenamiento en caché de la página y el almacenamiento en caché de fragmentos, lo que funcionaría con los parciales. Para obtener más información sobre las estrategias de caché de Rails, consulte la guía de raíles: http://guides.rails.info/caching_with_rails.html

1

Representará la respuesta del elemento de la lista de tareas de los archivos JavaScript ERB. Por lo tanto, cuando realiza la llamada link_to_remote, en lugar de redireccionar a la página, en cambio, renderiza javascript.

usted tendría la forma en /app/views/contact_call/_form.html.erb

/app/views/contact_call/create.js.RJS

page.replace :contact_form, :partial => "contact_call/form", :locals => { :user => @user } 
page.visual_effect :highlight, :contact_form 

Su controlador sería entonces hacer que el Javascript, que a su vez sustituir a HTML de la página con la versión más reciente (y resaltarlo). Y su página cargaría el parcial con tachado en los artículos completados.

+0

¿Funcionaría esto en una página de sesión autenticada? parece que lo haría ... ¿esto lo aceleraría en términos de la llamada a la base de datos? – Angela

+0

Sí, nada en él evitaría que funcione en una configuración no autenticada. Es posible que desee restringir el acceso a usuarios autenticados en una lista de tareas, pero eso depende de usted. –

Cuestiones relacionadas