2011-01-23 23 views
6

Estoy tratando de aprender rails haciendo algunos laboratorios en railsforzombies, estoy en lab3 (if declaraciones).if statement en rieles

Tiene dos tablas:

  • Zombies {id, nombre, cementerio}
  • Tweets {id, estado, zombie_id}

Objetivo En cada bloque, si un Zombie tiene más de 1 tuit, imprima SMART ZOMBIE

<% zombies = Zombie.all %> 

<ul> 
    <% zombies.each do |zombie| %> 
    <li> 
     <%= zombie.name %> 
     # add if statement here 
    </li> 
    <% end %> 
</ul> 

He intentado algunas soluciones pero me equivoco.

Respuesta

6

<%= 'SMART ZOMBIE' if zombie.tweets.size > 1 %>

Nota: recuento/longitud/tamaño son todos subtly different.

Editar: más de 1.

+1

Oh sí, '.any?' Sería mejor. – scragz

+0

Ohh, sí funciona, creo que me cuesta entender la sintaxis de ruby ​​/ rails. ¿Cómo hago esto: "En cada bloque, crea el enlace del nombre del Zombie a su página de edición" - Lo he intentado: <% = link_to "Edit", edit_tweet_path (tweet)%> .. – SHUMA

+1

Esto está mal, ya que lo hará no funciona por dos razones. 1) no use 'size', use' count' en su lugar ya que hace un conteo de SQL en lugar de un Ruby one 2) esto devolverá "SMART ZOMBIE" para zombies que solo tienen un tweet. –

8
<% if zombie.tweets.size > 1 %> 
    Smart Zombie! 
<% end %> 
1

Esto debería funcionar:

<ul> 
    <% zombies.each do |zombie| %> 
    <li> 
     <%= link_to zombie.name, edit_zombie_path(zombie) %> 
     <%= 'Smart Zombie' if zombie.tweets.count > 1 %> 
    </li> 
    <% end %> 
</ul> 
5

Esto funciona !!

<% zombies = Zombie.all %> 
<ul> 
    <% zombies.each do |zombie| %> 
    <li> 
     <%= zombie.name %> 
     <%= 'SMART ZOMBIE' if zombie.tweets.count > 1 %> 
    </li> 
    <% end %> 
</ul> 
+0

Esto hizo el truco. –

+0

Esto funcionará, pero dejará una línea vacía si la condición es falsa –

1

que fue alternativamente capaz de hacer el siguiente trabajo y transmitir, quisiera saber si esto es malo o no.


En cada bloque, si un zombi tiene más de 1 pío, imprimir INTELIGENTE ZOMBI

<% zombies = Zombie.all %> 

<ul> 
    <% zombies.each do |zombie| %> 
    <li> 
     <%= zombie.name %> 
     if zombie > 1 tweet put "SMART ZOMBIE" 
    </li> 
    <% end %> 
</ul> 
1
<ul> 
    <% zombies.each do |zombie| %> 
    <li> 

     <%= zombie.name %> 
     <% if zombie.tweets.size > 1 %> 
     SMART ZOMBIE 
     <% end %> 
    </li> 
    <% end %> 
</ul> 
0
<% if zombie.tweets.count > 1 %> 
    <em> SMART ZOMBIE </em> 
<% end %> 

Esto funcionó para mí

0

lo probé, ¡funciona!

<ul> 
    <% zombies.each do |zombie| %> 
     <li> 
      <%= zombie.name %> 
      <% if zombie.tweets.length > 1 %> 
       SMART ZOMBIE 
      <% end %> 
     </li> 
    <% end %> 
</ul>