【问题标题】:Convert slim to ERB将 slim 转换为 ERB
【发布时间】:2013-06-24 14:38:25
【问题描述】:

我正在 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 ')'

你能告诉我发生了什么吗? 提前谢谢你。

【问题讨论】:

    标签: ruby sinatra erb slim-lang


    【解决方案1】:

    在您的 &lt;ul&gt;... 行之后(&lt;% else %&gt; 之前)放置另一个 &lt;% end %&gt;

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

    此外,您还需要在 &lt;a&gt; 元素中使用 ERB 标签。您可能希望&lt;ul&gt; 在列表之外。整个事情应该是这样的:

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

    【讨论】:

    • 非常感谢 Dylan。你帮了大忙!
    猜你喜欢
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-20
    • 1970-01-01
    相关资源
    最近更新 更多