2010-10-21 7 views
1

J'ai un formulaire affichant une relation imbriquée. L'appel à rendre les objets enfant imbriqué est fait comme ci-dessous:Rendu basé sur une condition, rails

<% if @fpimgblocks %> 
  <% f.fields_for @fpimgblocks do |builder| %> 
    <%= render 'fpimgblock_fields', :f => builder %> 
  <% end %> 
<% end %> 

@fpimgblocks est le résultat d'une découverte, je l'ai vérifié, il y a aucun résultat donc je pense que cela ne rend. Cependant, le partiel est rendu même si l'objet n'est pas initialisé. Cela renvoie ensuite une erreur nil_class lorsque je valide le formulaire.

La syntaxe de l'instruction if est-elle incorrecte ou quelque chose? Je l'ai essayé de changer de « moins @ fpimgblocks.nil mais aucun changement

+1

Avez-vous essayé, <% à moins @ fpimgblocks.blank%?> ! 210 Ce http://stackoverflow.com/questions/885414/a-concise-explanation-of-nil-v-empty-v-blank-in-ruby-on-rails pourrait aider –

Répondre

6

@fpimgblocks est non nul que vous vous attendez Comme il est le résultat d'une découverte, il est en fait un tableau vide Changer ceci:...

<% if @fpimgblocks %> 

à ceci:.

<% unless @fpimgblocks.empty? %> 

Et cela fonctionnera J'espère que cette aide

+2

.blank? est probablement mieux dans ce cas, car il gère le cas @fpimgblocks est nul. Sinon @ fpimgblocks.empty? provoquera une NoMethodError. –

+2

Vous avez raison, ce serait - bien que j'aime 'vide?' Parce que c'est plus spécifique, et il n'y a jamais un cas où vous obtiendriez un zéro quand vous appelez 'Object.all' ou' Object.find (: all) ', ce qui est le cas dans cet exemple. –

+0

parfait, merci! – nktokyo