2009-12-22 3 views
0

J'essaie de comprendre comment effectuer un rendu sur un rendu partiel existant. Quelques éléments d'arrière-plan en premier:Rendu partiel basé sur le changement de résultat

J'ai une table qui est rendue en fonction des données de la base de données. En dehors de ma partie rendue, j'ai plusieurs balises de sélection qui permettent la mise à jour des données sur la balise select sélectionnée. J'ai essayé de faire ce qui suit, en vain.

<%= select "sales", "short_desc", Sales.find(:all).collect{|x| [ x.short_desc]}, {:prompt => ''}, 
      :onchange => remote_function(:url => {:controller => 'sales', :action => 'filterResults'}, 
        :with => "'value=' + value") %> 

ainsi dans la méthode filterResults, j'ai instruction SQL qui retourne un résultat, et je l'ai essayé de rendre à nouveau partielle.

render :partial => "tableReport", :locals => {:sales => @sales } 

Toute aide serait très appréciée, merci d'avoir pris le temps de préparer ma réponse.

Cordialement ~

Répondre

1

Vous voulez utiliser AJAX je suppose? J'utiliser RJS quelque chose comme ceci:

Dans votre contrôleur:

def filterResults 
    @sales = .. 
    # logic 
    respond_to do |format| 
     format.html # renders the normal view if it's a normal request 
     format.js # renders filter_results.rjs if it's an ajax request 
    end 
end 

vues/ventes/filter_results.rjs

page.replace 'id_of_your_div', :partial => 'tableReport', :object => @sales 

Je ne l'ai pas testé le code de sorte qu'il pourrait avoir besoin de changements . L'idée est que vous appelez filterResults avec ajax et qu'il renvoie un javascript qui remplace un div (ou tout autre objet avec ce #id) avec le partial. Vous utilisez la vue Rails API pour trouver plus de méthodes pour manipuler le DOM via RJS.

Questions connexes