2013-06-24 3 views
0

Я делаю первые шаги в рубине, и я пытаюсь научиться использовать Sinatra. В соответствующей книге я нашел этот пример, написанный в Slim.Convert slim to ERB

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

Я попытался изменить ее в Еврорадио заканчиваясь в чем-то вроде этого

<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> 

Синатра дал мне этого отчет

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 ')' 

Может ли вы дать мне подсказку о том, что происходит ? Спасибо заранее.

ответ

2

Положить еще один <% end %> сразу после вашего <ul>... линии (до <% else %>).

В Slim конец цикла @songs.each подразумевается отступом, но в ERB вам необходимо явно указать end.

Кроме того, вам необходимо использовать теги ERB в элементе <a>. И вы, вероятно, захотите получить <ul> за пределами списка. Вот что должно быть на самом деле:

<ul> 
    <% @songs.each do |song| %> 
    <li><a href="/songs/<%= song.id %>"><%= song.title %></a></li> 
    <% end %> 
</ul> 
+0

Большое спасибо Dylan.You были очень полезны! –