Я пытаюсь создать помощник для 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
Это Sinatra/HAML, а не Rails
Существует выходная переменная экземпляра буфера@_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>
как ты это передаешь, это просто хамл? в рельсах, которые вы бы использовали
concat