Sinatra 初體驗(2) template與layout

第一次使用Sinatra,還滿好玩的。
只要輸入gem install sinatra安裝
之後在ruby檔中require "sinatra/base"就可以使用了

each_with_index

原來要使用each_with_index來取出index,我還在想說沒有i怎麼用@@

1
2
3
4
5
6
<%  @images.each_with_index do |image, index| %>
<h2><a href="/images/<%= index %>"><%= image[:title] %></a></h2>
<p>
<img src="<%= image[:url]%>" alt="" />
</p>
<% end %>

初次使用haml

一樣輸入gem install haml安裝
使用方法跟erb的template差不多

1
2
3
4
5
get "/images/:index" do |index|
index = index.to_i
@image = IMAGES[index]
haml :"images/show"
end

比較有趣的地方是路徑前面都要多加個冒號。

view寫成這樣
/view/images/show.haml

使用layout

在views底下新增一個layout.erb
views/layout.erb

1
2
3
4
5
6
7
8
9
 <html>
<head>
<meta charset="utf-8"/>
<title>Erb layout</title>
</head>
<body>
<%= yield %>
</body>
</html>

這是app.rb也就是route

1
2
3
4
5
6
7
8
9
10
 get '/images' do
@images = IMAGES
erb :images
end

get "/images/:index" do |index|
index = index.to_i
@image = IMAGES[index]
haml :"images/show", layout: true
end

這邊的haml預設的 layout 會找 views/layout.haml 而不是 layout.erb,所以會找不到。
這邊 layout: true 其實可以不用設定,預設就會套用了。

評論