Haml, ошибка ruby ​​on rails: обнаружена синтаксическая ошибка при рендеринге шаблона - PullRequest
1 голос
/ 15 октября 2019

Я пытался выполнить следующий код, но получил:

"Encountered a syntax error while rendering template:"

Вот мое мнение:

%section
    %article
        - if @toss % 2 === 0
            %p the player #{@player_one.name} start the fight !
        - else 
            %p the player #{@player_two.name} start the fight !

        - while @hp_player_one > 0 && @hp_player_two > 0 
            - @hp_player_one -=  @player_two.attack
                %p  There is only #{@hp_player_one.to_s} point to #{@player_one.name}
            - @hp_player_two -=  @player_one.attack
                %p  There is only #{@hp_player_two.to_s} point to #{@player_two.name}
                -if @hp_player_one <= 0 && @hp_player_two > 0
                    %p #{@player_one.name} lost 
                -elsif @hp_player_two <= 0 && @hp_player_one > 0
                    %p #{@player_two.name} lost 
                -else 
                    %p draw ! 

Как мне это исправить?

1 Ответ

2 голосов
/ 15 октября 2019

Ваш отступ неправильный, я думаю, что вы хотите что-то вроде этого:

%section
    %article
        - if @toss % 2 === 0
            %p the player #{@player_one.name} start the fight !
        - else 
            %p the player #{@player_two.name} start the fight !

        - while @hp_player_one > 0 && @hp_player_two > 0 
            - @hp_player_one -=  @player_two.attack
            %p  There is only #{@hp_player_one.to_s} point to #{@player_one.name}
            - @hp_player_two -=  @player_one.attack
            %p  There is only #{@hp_player_two.to_s} point to #{@player_two.name}
            -if @hp_player_one <= 0 && @hp_player_two > 0
                %p #{@player_one.name} lost 
            -elsif @hp_player_two <= 0 && @hp_player_one > 0
                %p #{@player_two.name} lost 
            -else 
                %p draw ! 

В частности, вы не должны делать отступ после строки вроде

- @hp_player_one -=  @player_two.attack

, поскольку это не такначать блок. Haml видит отступ после этой строки и предполагает, что это начало блока, и поэтому вставляет соответствующий end в сгенерированный Ruby. Эти дополнительные end s дадут вам unexpected end, expecting end-of-input синтаксических ошибок.

...