2010-12-08 8 views
8

Tengo una configuración básica de vistas que fue generada por el andamio de Rails 3. Me da una vista parcial _form.html.erb. Tanto mi edit.html.erb como mi new.html.erb muestran esta vista parcial.Forma parcial en raíles 3 que necesitan un enlace diferente según Nuevo o Editar

En la vista parcial, quiero tener un link_to que va a diferentes caminos dependiendo de si se está representando por el nueva o la edición vista.

¿Hay una manera fácil de hacer esto?

Mi código se ve así actualmente, pero no permite diferentes rutas.

<%= f.submit %> or <%= link_to 'Go back', models_path %> 

Si ayuda, estoy tratando de enviar de vuelta a la página de su procedencia (que provienen de diferentes lugares para añadir y editar)

Respuesta

43

Puede usar form.object.new_record? en lugar de params [: acción] para saber si está editando o creando (vista de edición frente a vista nueva).

por ejemplo:

<%= simple_form_for(@item) do |f| %> 
    <% if @item.new_record? %> 
     <%= f.input :lost_time, input_html: { value: DateTime.now } %> 
    <% else %>      
     <%= f.input :lost_time, input_html: { value: @item.lost_time } %>  
    <% end %> 
<% end %> 
+0

¡Bien, definitivamente necesitaba esto! –

+0

También puede usar: form.object.persisted? que hace lo mismo que new_record? pero también verifica si el objeto fue destruido. – bkunzi01

4

no estoy tan familiarizado con los carriles 3. Pero la esperanza esto funciona para usted

<% if params[:action] == 'new' %> 
    # code for new 
<% elsif params[:action] == 'edit' %> 
    # code for edit 
<% end %> 

buena suerte: D

+0

Esta no es la mejor solución ya que no mostrará ningún vínculo en absoluto cuando falla la validación y la acción es crear o actualizar – axelarge

0

Tenga una mirada en link_to(:back).

Eso podría ser lo que necesita aquí.

+0

Esta no es la mejor solución por razones de seguridad y lógicas . "Al usar redirect_to: back, si no hay referencias, se generará RedirectBackError. Puede especificar algún comportamiento de repliegue para este caso rescatando RedirectBackError". – nanda

+0

Más tarde refactoré y terminé pasando la ruta como un parámetro local para el formulario, de esa manera si uso el formulario en una variedad de lugares, tengo control total. –

Cuestiones relacionadas