tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby

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">&times;</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



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 :)