Я пытаюсь создать помощник для HAML, который будет работать следующим образом:
%table
- tabular(items) do |i|
%tr
%td
= i[:title]
Я ожидаю, что он отобразит следующий HTML:
<table>
<tr><td>first</td></tr>
<tr><td>second</td></tr>
<tr><td>Total: 2</td></tr> <!-- This is not an item! -->
</table>
Я пробую этот подход, но не работает:
def tabular(items)
total = 0
items.each do |i|
total += 1
yield i
end
"<tr><td>Total: #{total}</td></tr>" # this line doesn't print :(
end
🤔 А знаете ли вы, что...
Ruby активно используется во множестве веб-сервисов и стартапов.
Существует выходная переменная экземпляра буфера@_out_buf
, к ней можно добавить:
# views/index.haml
- items = [{title: :first}, {title: :second}]
%table
# you have to indent this
- tabular(items) do |i|
%tr
%td
= i[:title]
# app.rb
require "sinatra"
helpers do
def concat string
@_out_buf << string
end
def tabular(items)
total = 0
items.each do |i|
total += 1
yield i
end
concat "<tr><td>Total: #{total}</td></tr>"
end
end
get "/" do
haml :index
end
Рендеры:
<table>
<tr><td>first</td></tr>
<tr><td>second</td></tr>
<tr><td>Total: 2</td></tr>
</table>