2010-02-11 5 views
3

Comment puis-je avoir des listes déroulantes liées sur une page rails. Les deux listes déroulantes proviendront de la base de données. Par exemple, si la première liste déroulante est category (table category). la deuxième liste déroulante, products, également en provenance de db, sera remplie en fonction de la sélection de la première liste déroulante?comment avoir des listes déroulantes liées sous forme de rails

Répondre

3

Vous pouvez créer votre liste déroulante en utilisant l'assistant collection_select et en sélectionnant une valeur dans une liste déroulante vous pouvez renvoyer la requête ajax à votre action de contrôleur pour mettre à jour un autre élément de la page avec le nouveau menu déroulant.

<%= collection_select(:category, :some_category_method_name, 
    Category.all, :id, :category_name, 
    {:prompt => 'Select'}, 
    { :onchange => remote_function(:url => {:action => 'get_products'}, 
    :with => "'id=' + this.value")}) 
%> 
<div id='product_dropdown'></div> 

donc, fondamentalement, ce que le code ci-dessus fait est, générant une baisse pour la catégorie et sur la modification de la valeur sélectionnée de ce bas drop envoie une requête à l'action « get_products » avec l'identifiant de la catégorie sélectionnée. Ensuite, dans cette méthode, vous pouvez obtenir tous les produits avec cette catégorie et mettre à jour l'élément 'product_dropdown' avec un nouveau partiel avec une liste déroulante pour les produits.

def get_products 
    @category = Category.find(params[:id) 
    render :update do |page| 
    page.replace_html 'product_dropdown', 
      :partial => 'partial_name_in_which_you_have_product_drop_down', 
      :locals => {:products => @category.products} 

    end 
end 

Espérons que cela devrait vous aider à démarrer.

Si vous ne savez pas comment fonctionne collection_select, alors here is the docs

0

Le plus simple est d'utiliser un widget Javascript qui fournira un menu hiérarchisé.

Voici O ne de YUI. Je suis sûr qu'il y en a d'autres basés sur d'autres boîtes à outils.

Questions connexes