2010-08-14 4 views
8

ich eine Rails-Hilfsmethode schreibe, die Wrapper html aufgenommenen Inhaltsblöcke und ersetzen content_for Verfahren, wieWie schreibe ich einen Helfer in Ruby on Rails, um Haml Blöcke zu erfassen?

- content_for :header do 
//haml code 

..would werden

- content :header do 
//haml code 

Um dies zu tun, fügen werde ich bin Verwenden von Haml- und Ruby-Blöcken. So sieht es aus

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 

Aber ich kann das nicht zur Arbeit bringen. Es gibt keine Fehlermeldung. Es zeigt den Block überhaupt nicht! Ich bin mir nicht sicher, was ich falsch mache. Ich würde mich über eine zweite Meinung freuen.

Antwort

10

Sie tun ungefähr das Richtige, aber Sie rufen tatsächlich nicht den Block #content wird übergeben. Verwenden Sie dazu entweder block.call oder Rubys integrierte yield-Anweisung.

0

genau dies im Verhalten

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

zu

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

Äquivalent eigentlich genau Diese beiden sind ändern. (Die '& Block'-Version ist vielleicht etwas performanter, aber in diesen Tagen sind sie ungefähr gleich.) Wie @nex3 jedoch darauf hinweist, nannte das OP nicht' yield', sondern gab einfach den 'block' ohne zurück es anruft. – Peeja