我有一个索引视图,其中一个人输入两个玩家和一个分数,我的应用程序应该返回两个赢家。我通过params哈希获得输入并尝试处理它,但似乎在if总是求值为true时提供的第一个条件。下面是我的控制器操作中的代码,以及呈现响应的视图:
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
答案 0 :(得分:3)
啊,最后,您的代码的问题 。您的代码与数据格式不对应。在评论中显示您发送的样本数据。看:
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)