2011-05-04 14 views
5

Haml yardımcılarını kullanmayı seviyorum, ancak yıllar boyunca işler biraz değişti. Eski yol basitçe tampon ile birleştirmek oldu. Bu bir dize dönmek için AncakGeri Dönüş Dizeleri Haml Yardımcıları Kullanma

- confirmation_table(@f) 

, bu (benim için) daha mantıklı: Bu, elbette, sadece kadar bence ulaşılabilir

def confirmation_table(field) 
    # Be certain that if the user is logged in, his/her email and name show 
    if field.respond_to? :user 
    haml_tag('tr') { 
     haml_tag('th', 'Email:') 
     haml_tag('td', field.user.email) 
    } 
    haml_tag('tr') {  
     haml_tag('th', 'Name:') 
     haml_tag('td', field.user.full_name) 
    } 
    else 
    haml_tag('tr') { 
     haml_tag('th', 'User Information:') 
     haml_tag('td', 'Not specified.') 
    } 
    end 

    field.class.columns.collect{|col| col.name}.reject{|col| 
    col =~ /_at$/ || 
    col =~ /_on$/ || 
    col =~ /_id$/ || 
    col == 'id'}.each do |col| 
    haml_tag('tr') { 
     haml_tag('th', ActiveSupport::Inflector::humanize(col)) 
     haml_tag('td', typeize(field, col)) 
    } 
    end 
end 

: İşte ne var . haml_capture'un aynı yapılandırma özelliğini nasıl sağladığını göremiyorum. Herhangi bir ipucu?

cevap

6

capture_haml içinde haml_tag aramaları sarın:

Onlar yakalanır ve capture_haml tarafından iade olacak
def confirmation_table(field) 
    capture_haml do 
    if field.respond_to? :user 
     haml_tag(:tr) do 
     haml_tag('th.email', 'Email:') 
     haml_tag('td.email', field.user.email) 
     end 
     # ... 
    end 
    end 
end 

.

+0

Örneğinizi, tamamıyla ve minimum düzeyde uygulanabilir olacak şekilde tamamlar mısınız? –

+0

Ne demek istiyorsun? Bazı "haml_tag" çağrıları ekleniyor? Veya HAML görünümünde bu yardımcının örnek bir kullanımı? –

+0

Evet, birden fazla "haml_tag" çağrısını ekliyorum. Kulağa aptalca geldiğini biliyorum, ama RoR'u yüklemeden komut satırından 'haml 'kullanmaya çalışıyorum ve çoğu insanın yapmadığı bazı sorunlar görüyorum. Bu nedenle, tam (ama küçük) bir örnek istiyorum. –