2009-11-19 3 views
0

Dans mon contrôleur je:partiel ne reçoivent pas toutes les variables de: habitants

- @items.each do |item| 
    = render :partial => 'item', :locals => { :item => item, :draggable => true } 

Et dans le je partiel item:

%span{:id => "item_#{item.id}", :class => 'item'} 
    = item.name 
    - if defined?(draggable) 
    = draggable_element "item_#{item.id}", :revert => true 

cependant, cela ne fonctionne pas, parce que defined?(draggable) retours false . Le draggable_element n'est jamais rendu.

Je sais que item est passé par :locals parce que le reste des rendus partiels. Si je change la partie comme suit:

- if defined?(item) 
    = draggable_element "item_#{item.id}", :revert => true 

Alors le draggable_element est rendu.

Toute idée pourquoi :draggable n'est pas passé à la partielle?

Répondre

4

Utilisez local_assigns[:draggable] au lieu de defined?(draggable).

"Les tests utilisant defined? var ne fonctionneront pas, il s'agit d'une restriction d'implémentation."

+0

défini? (Var) effectivement travaillé pour moi dans tous les autres cas, mais évidemment n'est pas le chemin à parcourir! Merci. – chrishunt

0

J'ai résolu ce problème dans le passé en le jetant dans le haut du partiel.

<% draggable ||= nil %> 

Cela me permet de faire

<% if draggable %> 

Tant que je ne cherche pas à faire la distinction entre draggable être nul et ne jamais être adopté.

Questions connexes