2010-11-29 2 views
0

J'ai un tel code à mon avis:première requête champ booléen ActiveRecord avec la valeur false donne vrai dans des rails 3

<% @items.each do |item| %> 
<tr<%= raw(item.presence ? '' : ' class="opaque"') %>> 
... 
<td><%= item.presence ? 'Yes' : 'No' %></td> 
</tr> 
<% end %> 

ceci est demande dans le contrôleur:

@items = Item.where(:type_id => @type.id).order('brand ASC, name ASC').limit(limit).offset((@page-1)*limit) 
champ

« présence » est En dépit du fait que le champ de présence du premier objet acquis est nul, il ne renvoie pas la classe attr pour la première ligne (comme si elle n'est pas nulle ou vraie), mais la seconde vérification renvoie la valeur correcte ('Non'). Dans les autres lignes avec des valeurs false ou nil, elle renvoie des valeurs correctes dans les deux vérifications. Est-ce un bug, ou je me trompe?

Rails 3.0.0, Postgres 8.4

Répondre

0

ajoute le produit? à l'aide de présence ...

<% @items.each do |item| %> 
<tr<%= raw(item.presence? ? '' : ' class="opaque"') %>> 
... 
<td><%= item.presence? ? 'Yes' : 'No' %></td> 
</tr> 
<% end %> 
+0

Oh, merci. Cela a vraiment aidé. Mais je suis toujours découragé de ce comportement étrange, que la même méthode de terrain donne la première fois une mauvaise valeur, et une bonne valeur dans le reste. – sandrew

+0

même avec le? en forçant AR à traiter la valeur comme booléenne, vous n'obtenez toujours pas classe = "opauqe" dans le premier appel? – Doon

+0

désolé, je me suis mal déshabillé. ? méthode de votre réponse fonctionne correctement tous les temps. Je ne comprends pas le comportement de la méthode sans? – sandrew

Questions connexes