2011-05-17 8 views
8

Tengo un recurso de publicación muy simple con dos acciones, índice y show. Mi plantilla contiene una barra lateral con enlaces a cada publicación anterior. Quiero que los enlaces de la barra lateral para mostrar su contenido (es decir los resultados del "espectáculo" acción) a través de AjaxRieles: mostrar los resultados del índice y mostrar acciones a través de ajax

Sé que hay un montón de excellenttuts que muestran cómo crear un formulario que presenta con el Ajax, pero esto tiempo que quiero usar para mostrar los contenidos de mi índice y mostrar acciones sin página referesh

. ¿Hay algún tutorial decente que brinde consejos sobre cómo hacer esto?

Creo que necesito crear un archivo show.js.erb, y decirle a mi acción de índice que responda a js, pero estoy un poco atascado de seguir avanzando. No sé muy bien qué poner en acción show del controlador o show.js.erb - que es un poco difícil de visualizar lo que necesito hacer

PS - utilizando los carriles 3.0.7, jquery-1,5

Respuesta

10

Tengo este trabajo, fue muy simple al final.

Paso 1 - añadir :remote => true a los enlaces en la barra lateral

#application.html.haml 
%nav#sidebar 
    - for post in @posts 
    = link_to post.title, post_path, :remote => true 
%div#main 
    = yield 

Paso 2 - informe a su controlador para responder a JS sobre la acción show

def show 
    @post = Post.find(params[:id]) 
    @posts=Post.all # needed for sidebar, probably better to use a cell for this 
    respond_to do |format| 
    format.html # show.html.erb 
    format.js # show.js.erb 
    end 
end 

Paso 3 - Crear _post.html.haml

# _post.html.haml 
%article.post 
    = sanitize post.body 

Paso 4 - Crear show.js.erb y reemplazar el html en el div #main con el contenido de la _POST parcial (que hemos creado en el paso 3)

# show.js.erb 
$("#main").html("<%= escape_javascript(render @post) %>"); 

Ahora todo el contenido se pasa a través de ajax y funciona bien.

+2

¿hay alguna manera de usar la url para manipular lo que @post muestra? – oFca

1

No tengo una respuesta completa, porque soy relativamente nuevo en esto también.

Pero, comenzaría por echar un vistazo al método get() de JQuery. Debería poder usar eso para llamar al índice o al método de mostrar. Esos métodos deberían devolver el html que desea mostrar en la sección de barra no lateral de la página. Puede usar el controlador de devolución de llamada get() para colocar ese HTML en el div apropiado en la página.

Disculpa que esto es un poco vago, pero si juegas con esto apuesto a que lo resolverás.

+0

es una idea interesante - estoy bastante seguro de que hay un lado del servidor que se acerca a este enfoque del lado del cliente - para fines de SEO y también porque quiero almacenar en el servidor - todavía, voy a echar un vistazo y ver qué Puedo encontrar - gracias – stephenmurdoch

Cuestiones relacionadas