ruby on rails - rails - Ponga un enlace en un flash
ruby on rails tutorial (8)
Estoy aprendiendo Ruby and Rails.
Tengo un proyecto de Ruby on Rails que rastrea los trabajos que se está ejecutando un servidor. En este momento, cuando creo manualmente un nuevo trabajo, anuncia:
flash[:notice] = "Created job job number #{update.id}."
Me gustaría convertir el #{update.id}
en un enlace al trabajo en la lista de trabajos.
La URL para ir al trabajo es jobs/list?job=1234
donde 1234 es la update.id
que se muestra en el aviso de flash.
¿Es posible poner un enlace en una declaración flash[:notice]
? ¿O necesito volver a trabajar sobre cómo se muestra este mensaje para convertirlo en un enlace?
Como comentó nas, link_to
no está disponible en su controlador a menos que incluya el módulo auxiliar correspondiente, pero url_for
está. Por lo tanto, haría más o menos lo que Emily dijo, excepto que use url_for
lugar de codificar una URL.
por ejemplo, si un trabajo se definió como un recurso en sus rutas:
link = "<a href=/"#{url_for(update)}/">#{update.id}</a>"
flash[:notice] = "Created job number #{link}"
La respuesta seleccionada no funcionó para mí. Pero la respuesta de esta publicación funcionó. Estoy usando Rails 4.2.4
por cierto. Con la guía de la respuesta que he vinculado, así es como lo hice:
Ver
<% flash.each do |name, msg| %>
<div class="alert alert-<%= name %>">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<div id="flash_<%= name %>"><%= sanitize(msg) %></div>
</div>
<% end %>
Controlador
flash[:success] = "Blah blah. #{view_context.link_to(''Click this link'', ''/url/here'')}"
La magia es el método de sanitize
.
No necesité usar .html_safe
también.
Me puede estar perdiendo algo obvio, pero solo deberías poder hacer
flash[:notice] = %Q[Created job number <a href="/jobs/list?job=#{update.id}">#{update.id}</a>]
y luego solo asegúrate de no escapar del contenido del flash cuando lo visualices en tu vista.
No olvide agregar .html_safe
al final del aviso, si está utilizando Rails3. Entonces diría flash[:notice] = "Your message".html_safe
Puede usar un alias en su controlador para la función link_to , o la receta RailsCast:
"Created job job number #{@template.link_to update.id,
:controller => ''jobs'', :action => ''list'', :job => update.id}."
Siempre puede usar los Rails link_to
helper:
flash[:notice] = "Created job job number #{link_to update.id, :controller => ''jobs'', :action => ''list'', :job => update.id}."
Sobre la base de la respuesta de Dorian, aquí hay un flash internacionalizado con un enlace:
flash[:notice] = t(''success'', go: view_context.link_to(t(''product''), @product)).html_safe
Donde su traducción (por ejemplo, un archivo YAML) podría contener:
en:
success: "Successfully created a %{go}"
product: "product"
it:
success: "%{go} creato con successo"
product: "Prodotto"
La variable de instancia @template
ya no está disponible en Rails 3 .
En cambio, puedes usar esto en tu controlador:
flash[:notice] = "Successfully created #{view_context.link_to(''product'', @product)}.".html_safe
Espero que esto ayude :)