2

人が 2 人のプレーヤーとスコアを入力するインデックス ビューがあり、アプリは 2 人の勝者を返すことになっています。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 に評価されます

4

1 に答える 1

3

ああ、結局のところ、問題あなたのコードにあります。コードがデータ形式に対応していません。コメントには、送信するサンプルデータが表示されます。見て:

set_1 = '3,6'

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

set_1ご想像のとおり、ここに配列ではなく文字列があります。したがって、その2番目の要素はコンマです。また、コンマを整数にキャストすると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)
于 2012-10-28T21:24:53.350 に答える