2010-08-14 2 views
8

Я пишу вспомогательный метод Rails, который добавит обертку HTML к захваченным содержательным блокам и заменить content_for метод, напримерКак написать помощника в Ruby on Rails для захвата блоков Haml?

- content_for :header do 
//haml code 

..would стать

- content :header do 
//haml code 

Для того, чтобы сделать это я используя блоки Haml и Ruby. Это то, на что похоже

def content(name,&block) 
content_for name do 
    capture_haml do 
    haml_tag "div",{:id=>name.to_s} do 
     haml_tag "div",{:id=>"#{name.to_s}_group"} do 
     block 
     end 
    end  
    end  
end 
end 

Но я не могу заставить это работать. Сообщение об ошибке отсутствует. Он просто не показывает блок вообще! Я не уверен, что я делаю неправильно. Я был бы признателен за второе мнение.

ответ

10

Вы делаете примерно правильную вещь, но вы на самом деле не вызываете блок #content. Для этого используйте либо block.call, либо инструкцию Ruby's yield.

0

просто изменить

haml_tag "div",{:id=>"#{name.to_s}_group"} do 
    yield 
end 

в

haml_tag "div",{:id=>"#{name.to_s}_group"},&block 
+0

Эти два фактически точно эквивалентны в поведении. (Версия '& block' может быть немного более результативной, но в эти дни они примерно одинаковы. Однако, как отмечает @ nex3, OP не вызывал' yield', а просто возвращал 'block' без называя это. – Peeja

 Смежные вопросы

  • Нет связанных вопросов^_^