Самым простым решением было бы просто вернуть HTML непосредственно из вашего помощника в виде строки:
def view(hand)
hand.map do |card|
"<div class='span2'><img src='/images/#{card[:suite]}_#{card[:value]}'></div>"
end.join
end
на вызов его из Haml что-то вроде:
= view(@the_hand)
Вы могли бы использовать из haml_tag
helper, который позволит вам написать что-то вроде:
def view(hand)
hand.each do |card|
haml_tag '.span2' do
haml_tag :img, 'src' => "/images/#{card[:suite]}_#{card[:value]}"
end
end
end
Обратите внимание, что haml_tag
пишет непосредственно на выход, а не возвращает строку, так что вы должны использовать его с -
, а не =
:
- view(@the_hand)
или использовать capture_haml
.
Этот метод означает, что ваш помощник зависит от Haml. Первый метод можно использовать независимо от используемого языка шаблонов, но не будет учитывать такие настройки, как format
, для того, чтобы закончить тег img
с помощью />
.
Если вы хотите использовать чистую Haml для разметки для каждой карты (этот пример достаточно прост, чтобы уйти с помощниками, но вы наверняка захотите сделать это для более сложных разделов), вы можете использовать частичный. Добавьте код Haml в файл с именем, например.view.haml
, то вы можете сделать это из шаблона, содержащего, передавая в руки в качестве локальной переменной:
view.haml
: шаблон
- hand.each do |card|
.span2
%img(src="/images/#{card[:suite]}_#{card[:value]}")
Родитель:
= haml :view, :locals => {:hand => @the_hand}