2010-12-04 5 views
0

Je viens d'avoir awesome_nested_set mis en place et tout fonctionne bien. Je me suis converti depuis acts_as_tree en utilisant Category.rebuild! listé sur le lien github.awesome_nested_set Comment ne pas sélectionner un parent?

Le problème est que je n'ai pas la possibilité de créer un nœud au niveau supérieur sans parent (par exemple, il n'y a aucun <option> vide dans le formulaire select). C'est le select_tag J'utilise:

<%= select_tag 'parent_id', options_for_select(nested_set_options(Page) {|i| "#{'..' * i.level} #{i.name}" }) %> 

Je suis un newb RoR donc je ne suis pas sûr de la façon de le faire, je peux donc créer une page sur le haut niveau. Quelqu'un peut me diriger dans la bonne direction?

Répondre

2

Pour créer un enregistrement au niveau racine, laissez simplement parent_id nul. Vous devrez ajouter une option pour cela:

<%= select_tag 'parent_id', options_for_select(
     nested_set_options(Page) {|i| "#{'..' * i.level} #{i.name}" }.unshift(["No Parent", nil]) 
    ) %> 

Il est probablement temps de déplacer ceci dans une aide.

+0

Merci Adam! Je vais essayer d'en faire un assistant, merci pour la tête à ce sujet! – jyoseph

+0

@jyoseph Maintenant que j'y pense, un meilleur choix d'interface utilisateur serait probablement de garder le champ désactivé sauf si un utilisateur souhaite assigner un parent. Cela nécessiterait un peu de JS. –

+0

Merci encore Adam. Le seul problème que j'ai rencontré avec ceci est lors de la modification d'un enregistrement existant, l'état n'est pas sauvegardé (le parent d'origine ne reste pas sélectionné, à la place l'option "Pas de parent" est sélectionnée) – jyoseph

1

Ce n'est pas tout à fait un bon moyen de le faire via unshift méthode. Utilisez : include_blank => true à la place.

<%= f.select :parent_id, nested_set_options(Page){|i| "#{'-' * i.level} #{i.name}" }, {:include_blank => true}, {:class => "form-control"} %> 
Questions connexes