2012-10-28 6 views
2

J'ai une vue Index où une personne entre deux joueurs et un score et mon application est censée retourner le gagnant des deux. Je reçois l'entrée via le hachage params et j'essaie de le traiter mais il semble que la première condition fournie dans le if soit toujours vraie. Voici le code dans mon de mon action du contrôleur, plus le point de vue qui rend la réponse:problème avec "si" condition

def find_winner 
    @player_1 = params[:player_1] 
    @player_2 = params[:player_2] 
    @set_1 = params[:set_1] 
    @set_2 = params[:set_2] 
    @set_3 = params[:set_3] 

     a = @set_1[0].to_i 
     b = @set_1[1].to_i 
     c = @set_2[0].to_i 
     d = @set_2[1].to_i 
     e = @set_3[0].to_i 
     f = @set_3[1].to_i 

     if ((a + c + e) > (b + d + f)) then 
     @winner = @player_1 
     elsif ((a + c + e) < (b + d + f)) then 
     @winner = @player_2 
     else 
     @winner = "winner" 
     end 
    end 

et le code du modèle .erb:

<%= @player_1 %> 
<%= @a %> 
<%= @player_2 %> 
<%= @set_1.class %> 
<%= @set_2 %> 
<%= @set_3 %> 
<%= @b %> 
<blockquote> the winner is <%= @winner %> 

@winner évalue toujours player_1

+0

BTW, vous n'avez pas besoin 'then' mots-clés ici. Vous pouvez les laisser tomber en toute sécurité. –

+0

Je suggère qu'il y a un problème avec vos données. Autrement dit, vous n'envoyez jamais de paramètres avec lesquels un deuxième joueur devrait gagner. Votre code me semble correct. –

+0

Paramètres: {"utf8" => "✓", "authenticity_token" => "SJ1s58B0js + Tbb2LOJ99stlWSUQEk4tLmI3VxzUboYI =", "player_1" => "perdant", "player_2" => "gagnant", "set_1" => "3 , 6 "," set_2 "=>" 2,6 "," set_3 "=>" 0,0 "," commit "=>" obtenir le gagnant "} le serveur envoie le dessus dans le corps de la requête. et quand je les évalue comme vous voyez dans le code de .erb ils contiennent des valeurs. – Lym

Répondre

3

Ah, à la fin, le problème est avec votre code. Votre code ne correspond pas au format de données. Dans les commentaires, vous montrez des exemples de données que vous envoyez. Regardez:

set_1 = '3,6' 

a = set_1[0].to_i # => 3 
b = set_1[1].to_i # => 0 

set_1 est une chaîne, pas le tableau ici, comme vous pourriez penser. Donc, son deuxième élément est une virgule. Et la virgule en entier produit 0. Donc, la somme de (a, c, e) sera toujours plus grande que la somme des zéros (b, d, f).

Vous voudrez peut-être faire quelque chose comme ceci:

a, b = params[:set_1].split(',').map(&:to_i) 
c, d = params[:set_2].split(',').map(&:to_i) 
e, f = params[:set_3].split(',').map(&:to_i) 
+1

Les gens ne rencontreraient pas de problèmes de ce genre s'ils venaient d'apprendre à déboguer leur code. Un simple 'logger.debug (a, b, c, d, e, f)' aurait révélé ce problème il y a longtemps: http://guides.rubyonrails.org/debugging_rails_applications.html – Casper

+0

@Casper: convenu. Certaines personnes ne peuvent pas déboguer :) –

+1

merci un gazillion @SergioTulentsev, pour une raison quelconque, je ne voyais pas la virgule. Je suppose que parfois vous avez juste besoin d'une nouvelle paire d'yeux. Merci encore. :) – Lym