2016-11-08 3 views
1

Ich versuche, den folgenden HTML-Code in einen Rubin Helfer zu konvertieren zu konvertieren:versuchen html zu einem Schiene Helfer

<a href="home.html" class="hvr-sweep-to-bottom"> 
    <i class="flaticon-insignia"></i> 
    <span>home</span> 
</a> 

Hier ist mein Code so weit, dass nicht funktioniert:

link_to home_path(media), class: 'hvr-sweep-to-bottom' do 
    content_tag(:i, class: 'flaticon-insignia') {} 
    content_tag(:span) do 
     menu_item.title 
    end 
end 

Dieses erzeugt die folgende Ausgabe:

<a class="hvr-sweep-to-bottom" href="/"> 
    <span>Home</span> 
</a> 

Wie bekomme ich das zur Arbeit?

+0

Wenn Sie sagen, dass es "nicht funktioniert", welche Symptome sehen Sie? – Tass

+0

@ Philip7899, wenn dein Block mehr als einen 'content_tag' hat, musst du ihn" concat ", addiere" concat "zu jedem' content_tag', den du in deinem Block hast. Dies ist ein Beispiel: 'concat (content_tag ...)' – fanta

+0

Warum möchten Sie Helfer und nicht teilweise verwenden? –

Antwort

1

link_to, wenn ein Block übergeben, wird wickeln <a> Tags um, was auch immer der Block zurückgibt. In Ihrem Code:

link_to home_path(media), class: 'hvr-sweep-to-bottom' do 
    content_tag(:i, class: 'flaticon-insignia') {} 
    content_tag(:span) do 
     menu_item.title 
    end 
end 

das einzige, was wird zurück der letzte Methodenaufruf ist (content_tag(:span) do ... end). Es gibt mehrere Möglichkeiten, dies zu schreiben, wie die Verwendung von String#concat, aber hier ist, wie ich es normalerweise tun:

link_to home_path(media), class: 'hvr-sweep-to-bottom' do 
    link_text = content_tag(:i, class: 'flaticon-insignia') {} 
    link_text << content_tag(:span) do 
     menu_item.title 
    end 
end 

Beachten Sie auch, dass in Ihrem Beispiel menu_item.title ist Home nicht home; und home_path(media) ist / nicht home.html - so werden Sie immer noch nicht mit identischem HTML enden. Dies sind jedoch beide getrennte Themen für Sie zum Nachdenken.

+0

Ich bin ziemlich sicher, dass man '.html_safe' irgendwo dort braucht. –

+0

@SergioTulentsev, wir versuchen, die Person zu unterstützen, die die Frage stellt, und nicht jeden Code im Code, mit dem wir arbeiten, zu kritisieren. – Tass

0

verketten die content_tags zusammen, mit der + symbol:

link_to home_path(media), class: 'hvr-sweep-to-bottom' do 
    content_tag(:i, '', class: 'flaticon-insignia') + content_tag(:span, menu_item.title) 
end 

das tun sollte es

Verwandte Themen