2011-04-14 6 views
0

J'ai une application rails qui a quelques fonctionnalités simples, permettant à l'utilisateur de sauvegarder/annuler des messages.Rails 3 mise à jour multiple du même élément sur une page en utilisant Ajax

Il fait cette belle et ajaxy, comme ceci:

Vue:

<p id="save_<%= frugle.id %>"> 
    <%= link_to "Save", new_saveds_path(current_user.id, :post_id => post.id), :remote => true %> 
</p> 
contrôleur

:

class SavedsController < ApplicationController 
    def new 
    @follow = Saved.create(:user_id => current_user.id, :post_id => params[:post_id]) 
    @post = Post.find params[:post_id] 
    render :update do |page| 
     page.replace_html "save_#{@post.id}", "#{link_to "Unsave", saveds_path(current_user.id, :post_id => @post.id), :method => :delete, :remote => true }" 
    end 
    end 

Cela fonctionne bien et dandy. Ma question arrive, comme parfois, sur la page d'accueil, l'utilisateur a beaucoup de messages affichés, et parfois le même poste apparaît deux fois. Si l'utilisateur va enregistrer ce post, le RJS ci-dessus changera simplement le premier p avec cet identifiant particulier qu'il rencontrera puis s'arrêtera. Est-il possible de mettre à jour tous les p avec cet ID sur une seule page?

Cela a du sens, n'est-ce pas?

Merci!

Répondre

0

Vous ne pouvez pas "mettre à jour tous les 'p avec cet ID", car par définition un seul élément de la page a un ID donné.

Cependant, si vous donnez tous vos <p> s une classe selon leur id rails, vous pouvez faire ce que vous voulez.

Exemple:

<p class="object-1234">test</p> 
<p class="object-5678">another test</p> 
<p class="object-1234">test</p> 

Maintenant, vous pouvez faire:

$('.object-1234').hide() 

et obtenir l'effet désiré.

modifier:
En outre, cela suppose que vous utilisez jQuery dans votre point de vue AJAX. Je vous conseille fortement de le faire - c'est plus utile que les rjs intégrés.
Voici un screencast à ce sujet: http://railscasts.com/episodes/136-jquery

+0

Je suis d'accord, je voudrais aller à jquery, mais le site est principalement construit en utilisant les rjs par défaut. Est-il possible d'utiliser le RJS pour mettre à jour les éléments par classe au lieu de id? – goddamnyouryan

+1

page.select ('.chaque_classe'). Each do | element | page.replace_html élément, "

OHAI

" fin – x10

Questions connexes