1

移動アクションを使用して、Rails アプリで AJAX 呼び出しを行っています。コントローラーのアクションは次のとおりです。

def move
    @game = Game.find_by_id(params[:game])
    @player_square = params[:square].to_i
    @game.move(@player_square, :player)
    @ai_square = GameKeeper.ai_move(@game)
    @game.move(@ai_square, :ai) unless @game.squares.compact.count == 9
    @winner = GameKeeper.winner(@game) || "" # need to convert nil to an empty string because javascript recognizes null, not nil

end

そして私の move.js.erb には以下が含まれます:

var ai_square = $("#square_<%= @ai_square %>");
ai_square.after("X");
ai_square.remove();
var player_square = $("#square_<%= @player_square %>");
player_square.after("O");
player_square.remove();

if(<%= @winner %>) {
     $('#winner').slideToggle("slow");
}

JavaScript の if ブロックをコメントアウトすると他のコードは正常に動作しますが、if のままだと @winner が true かどうかに関係なく js が実行されません。何がうまくいかないのですか?

解決

したがって、何らかの理由で、js if ブロックを erb if ブロックに切り替えると、次のようになります。

<% if @winner %>
    $("#winner").slideToggle("slow");
<% end %>

すべてうまくいきます!元のバージョンが機能しなかった理由を知ることができれば幸いですが、他の誰かが同じ問題を抱えている場合の解決策を次に示します.

4

0 に答える 0