Mettre un lien en un éclair

J’apprends Ruby et Rails.

J’ai un projet Ruby on Rails qui effectue le suivi des travaux exécutés par un serveur. En ce moment, quand je crée manuellement un nouveau travail, il annonce:

flash[:notice] = "Created job job number #{update.id}." 

Je voudrais transformer le #{update.id} en lien vers le travail sur la liste des travaux.

L’URL pour accéder au travail est jobs/list?job=1234 update.id jobs/list?job=1234 où 1234 est le update.id affiché dans la notification flash.

Est-il possible de mettre un lien dans une déclaration flash[:notice] ? Ou est-ce que je dois retravailler comment ce message est affiché pour le transformer en lien?

Je manque peut-être quelque chose d’évident, mais vous devriez juste être capable de faire

 flash[:notice] = %Q[Created job number #{update.id}] 

et puis assurez-vous simplement que vous n’échappez pas au contenu du flash lorsque vous l’affichez à votre vue.

N’oubliez pas d’append .html_safe à la fin de l’avis, si vous utilisez Rails3. Donc, il dirait flash[:notice] = "Your message".html_safe

La variable d’instance @template n’est plus disponible dans Rails 3 .

Au lieu de cela, vous pouvez l’utiliser dans votre contrôleur:

 flash[:notice] = "Successfully created #{view_context.link_to('product', @product)}.".html_safe 

J’espère que cela t’aides 🙂

Comme vous l’avez dit, link_to n’est pas disponible à partir de votre contrôleur, sauf si vous incluez le module d’aide approprié, mais que url_for est. Par conséquent, je ferais à peu près ce que Emily a dit, sauf utiliser url_for au lieu de coder en dur une URL.

Par exemple, si un travail a été défini comme ressource dans vos itinéraires:

 link = "#{update.id}" flash[:notice] = "Created job number #{link}" 

Vous pouvez utiliser un alias dans votre contrôleur pour la fonction link_to ou la recette RailsCast:

 "Created job job number #{@template.link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}." 

http://railscasts.com/episodes/132-helpers-outside-views

En s’appuyant sur la réponse de Dorian, voici un flash internationalisé avec un lien:

 flash[:notice] = t('success', go: view_context.link_to(t('product'), @product)).html_safe 

Où votre traduction (par exemple un fichier YAML) peut contenir:

 en: success: "Successfully created a %{go}" product: "product" it: success: "%{go} creato con successo" product: "Prodotto" 

La réponse sélectionnée n’a pas fonctionné pour moi. Mais la réponse de ce poste a fonctionné. J’utilise Rails 4.2.4 au fait. Avec les conseils de la réponse que j’ai liée, voici comment je l’ai fait:

Vue

 <% flash.each do |name, msg| %> 
<%= sanitize(msg) %>
<% end %>

Manette

 flash[:success] = "Blah blah. #{view_context.link_to('Click this link', '/url/here')}" 

La magie est la méthode de sanitize .

Je n’ai pas eu besoin d’utiliser aussi .html_safe .

Vous pouvez toujours utiliser l’assistant link_to Rails:

 flash[:notice] = "Created job job number #{link_to update.id, :controller => 'jobs', :action => 'list', :job => update.id}."