Rails语法错误:意外的keyword_ensure,期待keyword_end

时间:2013-07-18 05:36:57

标签: ruby-on-rails ruby erb

<h1>Get Ready</h1>
<% if params[:ballot_position].to_i > 1 %>
<p>
Voter <%= params[:ballot_position].to_i - 1 %>, go get voter <%= params[:ballot_position] %>
and switch places with them.
</p>
<p>
Voter <%= params[:ballot_position] %>, when you are ready, click the button marked "Ready" below.
</p>
<% @ballot_link = "/vote/#{params[:election_id]}/ballot/#{params[:ballot_position]}" %>
<a href="<%= @ballot_link %>" class="btn btn-primary">Ready</a>

以上代码似乎导致:

ready.html.erb:13: syntax error, unexpected keyword_ensure, expecting keyword_end
ready.html.erb:15: syntax error, unexpected $end, expecting keyword_end

发生了什么事?这种语法出了什么问题?

3 个答案:

答案 0 :(得分:14)

您收到的错误很可能源于尝试执行if-else条件,其中您在 <% end %>之前有额外的<% else %> 。确保您的条件遵循规范的 if-else-end 逻辑,如下所示:

<% if ... %>
    <% @ballot_link = "/vote/#{params[:election_id]}/ballot/#{params[:ballot_position]}" %>
    <a href="<%= @ballot_link %>" class="btn btn-primary">Ready</a>
<% else %>
    ...
<% end %>

答案 1 :(得分:0)

你正在使用if条件。所以你应该结束它。 erb的基本if条件语法是

<% if ...condition.. %>
    Statement
<% end %>

你必须决定你在用什么?如果是条件或if-else条件

在您的情况下,没有&lt;%end%&gt;最后的子句,所以你必须添加它。

<h1>Get Ready</h1>
<% if params[:ballot_position].to_i > 1 %>
<p>
Voter <%= params[:ballot_position].to_i - 1 %>, go get voter <%= params[:ballot_position] %>
and switch places with them.
</p>
<p>
Voter <%= params[:ballot_position] %>, when you are ready, click the button marked "Ready" below.
</p>
<% @ballot_link = "/vote/#{params[:election_id]}/ballot/#{params[:ballot_position]}" %>
<a href="<%= @ballot_link %>" class="btn btn-primary">Ready</a> 

<% end %>  # this is what you have to add

答案 2 :(得分:0)

我的问题是我在使用link_to创建链接时忘了结束do块。我的错误代码如下:

      <%= link_to("#", :class => "example-class") do %>
        Nested HTML goes here

我忘记了结束声明。正确的代码如下:

      <%= link_to("#", :class => "example-class") do %>
        Nested HTML goes here
      <% end %>

希望这有助于某人。