2016-11-08 3 views
1

にHTMLを変換しようと、私はルビーヘルパーに次のHTMLを変換しようとしています:ここではレールヘルパー

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

は私のコードは動作しませんので、これまでです:

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 

この次の出力が生成されます。

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

これをどのように動作させるのですか?ブロックを通過したとき

+0

"動作しない、" あなたは何の症状を見ているやるべきこと? – Tass

+0

@ Philip7899は、あなたのブロックに複数の 'content_tag'がある場合、それらを' concat'して、あなたのブロックにある 'content_tag'に' concat'を追加する必要があります。これは一例です: 'concat(content_tag ...)' – fanta

+0

なぜあなたは部分的ではなくヘルパーを使いたいのですか? –

答えて

1

link_to、を返しどんなブロックの周り<a>タグをラップします。あなたのコードでは:

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 

を返される唯一のものは、最終的なメソッド呼び出し(content_tag(:span) do ... end)です。そこなString#concatを使用するなど、これを書いている複数の方法は、ありますが、ここで私は通常、それを行う方法は次のとおりです。また、そのあなたの例では

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 

注意、menu_item.titleHomeないhomeです。 home_path(media)/ではなく、home.htmlであり、同じHTMLで終わることはありません。しかし、それらはあなたが考えることのできる別々の問題です。

+0

私は確かに誰かがそこに '.html_safe'を必要とすると確信しています。 –

+0

@SergioTulentsev、我々は、質問をしている人を助けようとしています。 – Tass

0

は使用して、一緒にcontent_tagsを連結し+ 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 

あなたはそれを言うとき、それは

関連する問題