8

我是 Rails 的新手,我尝试根据教程创建论坛应用程序。这是我的论坛页面,但我不断收到错误消息:

syntax error, unexpected keyword_ensure, expecting end-of-input

Extracted source (around line #33):
30 
31    <p><% if admin? %><%= link_to "New Forum", new_forum_path %><% end %></p>  

这是抛出错误的论坛索引页面:

<% title "Forums" %>  

<table>  
  <tr>  
    <th width="70%">Forum</th>  
    <th width="30%">Last Post</th>  
  </tr>  
  <% for forum in @forums %>  
    <tr>  
      <td><h4><%= link_to h(forum.name), forum_path(forum.id) %></h4>  
        <small><%= forum.topics.count %> topics</small><br />  
        <%=h forum.description %></td>  
      <td class="right">
      <% if forum.most_recent_post %>
      <%= distance_of_time_in_words_to_now forum.most_recent_post.last_post_at %>
       ago by 
       <%= link_to forum.most_recent_post.user.username, "/users/#{forum.most_recent_post.last_poster_id}" %>
       <% else %>no posts<% end %>
       </td>  
      <% if admin? %>
      <td><%= link_to "Edit", edit_forum_path(forum) %>
  <% end %></td>
  <!-- <% end %> -->  
  <% if admin? %>
  <td><%= link_to "Destroy", forum, :confirm => 'Are you sure?', :method => :delete %></td>
  <% end %>  
</tr>  
  <% end %>  

<p><% if admin? %><%= link_to "New Forum", new_forum_path %><% end %></p>  
4

4 回答 4

4

<!-- <% end %> -->这是在做什么?一个 html 注释的 ERB 标记仍将评估。去掉它。如果您想评论 ruby​​ 代码,请#改用,例如<% #end %>

于 2013-10-19T08:51:30.797 回答
3

正确格式化的代码对诊断此类问题(不匹配等)大有帮助。尝试以下方法:

<% title "Forums" %>  

<table>  
  <tr>  
    <th width="70%">Forum</th>  
    <th width="30%">Last Post</th>  
  </tr>  
  <% for forum in @forums %>  
    <tr>  
      <td>
        <h4><%= link_to h(forum.name), forum_path(forum.id) %></h4>  
        <small><%= forum.topics.count %> topics</small>
        <br />
        <%=h forum.description %>
      </td>
      <td class="right">
        <% if forum.most_recent_post %>
          <%= distance_of_time_in_words_to_now forum.most_recent_post.last_post_at %>
          ago by 
          <%= link_to forum.most_recent_post.user.username, "/users/#{forum.most_recent_post.last_poster_id}" %>
        <% else %>
          no posts
        <% end %>
      </td>  
      <% if admin? %>
        <td><%= link_to "Edit", edit_forum_path(forum) %></td>
        <td><%= link_to "Destroy", forum, :confirm => 'Are you sure?', :method => :delete %></td>
      <% end %>
    </tr>
  <% end %>
</table>

<% if admin? %>
  <p><%= link_to "New Forum", new_forum_path %></p>
<% end %>
于 2013-10-20T10:23:22.080 回答
1

我认为您打开和关闭块的顺序混乱了。 if,for都是必须在适当时间关闭的开放块。

本杰明提到的注释掉的结束标签实际上很重要,但放错了位置,必须在您的</tr></table>标签之间才能关闭for forum in @forums.

我准备了一个经过重新调整的修改版本,这样我就可以更容易地理解它。不过还没有实际测试过。

<% title "Forums" %>  

<table>  
  <tr>  
    <th width="70%">Forum</th>  
    <th width="30%">Last Post</th>  
  </tr>  
  <% for forum in @forums %>  
    <tr>  
      <td>
        <h4><%= link_to h(forum.name), forum_path(forum.id) %></h4>  
        <small><%= forum.topics.count %> topics</small><br />  
        <%=h forum.description %></td>  
      <td class="right">
      <% if forum.most_recent_post %>
        <%= distance_of_time_in_words_to_now forum.most_recent_post.last_post_at %>
         ago by 
         <%= link_to forum.most_recent_post.user.username, "/users/#{forum.most_recent_post.last_poster_id}" %>
      <% else %>
        no posts
      <% end %>
      </td>  
      <% if admin? %>
        <td>
          <%= link_to "Edit", edit_forum_path(forum) %>
        </td>
      <% end %>
      <% if admin? %>
        <td><%= link_to "Destroy", forum, :confirm => 'Are you sure?', :method => :delete %></td>
      <% end %>  
    </tr>
  <% end %>
</table>
<p>
  <% if admin? %>
    <%= link_to "New Forum", new_forum_path %>
  <% end %>
</p>
于 2013-10-20T09:36:51.367 回答
1

我所能看到的所有错误是你在它应该在这里之前设置了结束

      <% if admin? %>
      <td><%= link_to "Edit", edit_forum_path(forum) %>
  <% end %></td>

所以试着像这样移动它

      <% if admin? %>
      <td><%= link_to "Edit", edit_forum_path(forum) %>
  </td><% end %>
于 2013-10-19T06:43:26.273 回答