【问题标题】:trouble with "if" condition“如果”条件有问题
【发布时间】:2012-10-29 05:27:31
【问题描述】:

我有一个索引视图,其中一个人输入两个玩家和一个分数,我的应用程序应该返回两个玩家的获胜者。我通过参数哈希获取输入并尝试处理它,但似乎 if 中提供的第一个条件总是评估为真。下面是我的控制器操作中的代码,以及呈现响应的视图:

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

以及来自 .erb 模板的代码:

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

@winner 的计算结果始终为 player_1

【问题讨论】:

  • 顺便说一句,这里不需要then 关键字。您可以安全地放下它们。
  • 我建议您的数据有问题。也就是说,您永远不会发送第二个玩家应该获胜的参数。你的代码在我看来没问题。
  • 参数:{"utf8"=>"✓", "authenticity_token"=>"SJ1s58B0js+Tbb2LOJ99stlWSUQEk4tLmI3VxzUboYI=", "player_1"=>"loser", "player_2"=>"winner", "set_1"=>"3,6", "set_2"=>"2,6", "set_3"=>"0,0", "commit"=>"get Winner"} 服务器将上述内容发送到请求正文。当我像你在 .erb 代码中看到的那样评估它们时,它们包含值。
  • 好吧,您是否尝试过调试打印 a, b, c, d... 变量的实际值?
  • 是的,它们都像我预期的那样产生整数。

标签: ruby-on-rails ruby


【解决方案1】:

啊,归根结底,问题与您的代码有关。您的代码与数据格式不对应。在 cmets 中,您显示您发送的示例数据。看:

set_1 = '3,6'

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

set_1 这里是一个字符串,而不是你可能认为的数组。因此,它的第二个元素是逗号。并且将逗号转换为整数会产生 0。因此,(a, c, e) 之和将始终大于零之和 (b, d, f)。

您可能想要这样做:

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)

【讨论】:

  • 人们只要学会调试代码就不会遇到这样的问题。一个简单的logger.debug(a,b,c,d,e,f) 早就揭示了这个问题:guides.rubyonrails.org/debugging_rails_applications.html
  • @Casper:同意。有些人就是无法调试 :)
  • 非常感谢@SergioTulentsev,由于某种原因我没有看到逗号。我想有时你只需要一双新鲜的眼睛。再次感谢。 :)
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多