0

我正在 ruby​​ 中迈出第一步,我正在尝试学习如何使用 Sinatra。在一本相关的书中,我发现这个示例视图是用 Slim 编写的。

h1 Songs
a href="/songs/new" Create a new song
- if @songs.any?
  ul#songs
    -@songs.each do |song|
      li <a href="/songs/#{song.id}">#{song.title}</a>
- else
  p No songs have been created yet!

我试图将其更改为 ERB,结果是这样的

<html>
<h1> Songs </h1>
<a href="/songs/new" Create a new song></a>
<% if @songs.any? %>
    <%#songs%>
    <% @songs.each do |song|%>
        <ul><li> <a href="/songs/#{song.id}"><%=#{song.title}%></a></li></ul>
<% else %>
    <p> No songs have been created yet!</p>
<% end %>   
</html>

Sinatra 给了我这份报告

SyntaxError at /songs
Documents/programs/sinatra/views/songs.erb:8: syntax error, unexpected keyword_else, expecting ')' ; else ^ 
Documents/programs/sinatra/views/songs.erb:10: syntax error, unexpected keyword_end, expecting ')' ; end ; @_out_buf.concat "\t\n" ^ 
Documents/programs/sinatra/views/songs.erb:14: syntax error, unexpected keyword_ensure, expecting ')' 
Documents/programs/sinatra/views/songs.erb:16: syntax error, unexpected keyword_end, expecting ')'

你能给我一个线索吗?先感谢您。

4

1 回答 1

2

将另一个放在<% end %>您的<ul>...行之后(在 之前<% else %>)。

在 Slim 中,@songs.each缩进暗示了循环的结束,但在 ERB 中,您需要显式地显示end它。

此外,您还需要在<a>元素中使用 ERB 标签。而且您可能想要<ul>列表之外的内容。这就是整个事情应该是这样的:

<ul>
  <% @songs.each do |song| %>
    <li><a href="/songs/<%= song.id %>"><%= song.title %></a></li>
  <% end %>
</ul>
于 2013-06-24T14:39:46.737 回答