web-dev-qa-db-fra.com

link_to image_tag avec texte interne ou html en rails

Je veux sortir ce qui suit avec Ruby on Rails link_to et image_tag méthodes:

<a href="#">Lorem Ipsum <img src="/images/menu-arrow-down.gif"></a>

Quel serait un bon moyen dans Rails?

42
useranon

Pourquoi ne pas simplement utiliser un lien vers et une balise d'image?

<%= link_to "hiii #{image_tag(yourimagepath)}", "link_path" %>

Vous pouvez également essayer l'ajout effectué ci-dessus (string + image_tag), mais cela générera une erreur si l'une de ces choses devient nil. En utilisant l'interpolation, il affichera simplement une image (ou chaîne) vierge si elle est nil.

Pour Rails 3, vous devrez utiliser html_safe:

<%= link_to "hiii #{image_tag(yourimagepath)}".html_safe, "link_path" %>
34
corroded

Vous pouvez utiliser des blocs comme alternative à l'interpolation de chaîne avec une utilisation correcte html_safe. Par exemple:

<%= link_to '#' do %>
  Lorem Ipsum <%= image_tag('/images/menu-arrow-down.gif') %>
<% end %>
86
Kevin Sylvestre

Ou un moyen plus court est

<%= link_to image_tag('image/someimage.png') + "Some text", some_path %>
35
Fazley
link_to(image_tag("image.png", :alt =>  "alt text", :class =>"anyclass"), image_url) 
4
trying_hal9000

Je n'arrive pas à comprendre comment ajouter un commentaire à la réponse de @ corroded. Cependant, si vous utilisez Rails 3, sa réponse ne fonctionnera pas comme prévu. Il pourrait ne pas être immédiatement évident comment résoudre ce problème, du moins ce n'était pas pour moi. Je savais que j'avais besoin ajouter html_safe, mais le mettre au mauvais endroit. Rétrospectivement, c'était évident, mais je pensais que je l'inclurais ici pour d'autres comme moi qui commettent l'erreur "recrue".

<%= link_to "hiii #{image_tag(yourimagepath)}".html_safe, "link_path" %>

attention cependant, si vous utilisez une variable assignable par l'utilisateur pour "hiii", vous devez d'abord la nettoyer.

<%= link_to (h(my_model.some_string) + image_tag(yourimagepath)).html_safe,
            "link_path" %>

Notez qu'il n'y a aucun problème avec my_model.some_string ou yourimagepath étant nul car les deux h() et image_tag () renvoient des chaînes une fois passées nil.

3
James

Je préfère cette approche en HAML

= link_to root_path do
  = image_tag "ic_launcher.png", size: "16x16"
  Home
2
Eric Woodruff

Voici une façon intéressante d'utiliser un link_to pour inclure une image et un mailto href avec du texte (affiché à côté de l'image):

<%= link_to image_tag("image.png") + " [email protected]", 
                         href: "mailto:[email protected]" %>

Vous donnant quelque chose comme ça dans votre vue (l'image et le texte entiers deviennent un mailto href):

hyperlinked image and text with mailto

2
Eribos

j'ai découvert cela aussi qui a fonctionné.

link_to(image_tag("/images/linkd.png",:alt=>"twt"){},:href=>"some_url",:target=>"_blank")
0
Vishnu

Pour moi, cela a très bien fonctionné:

<%= link_to(image_tag(<URL>,style),<URL>) %>
0
Ivasan