2011-01-29 15 views
8

Tengo una página de destino desagradablemente grande con un formulario de registro en medio de ella. Si envío el formulario y la validación falla, quiero volver a presentar la página de destino, pero quiero que se desplace hasta el formulario de registro para que puedan ver los errores y realizar ediciones. ¿Es posible saltar al formulario con el método render, o debo hacer redirect_to "account/new#theFormID"?¿Cómo hacer que Rails represente una vista y se desplace automáticamente hacia abajo?

preferiría no hacer una redirección porque hay que guardar la información del formulario en una sesión, vuelva a llenar el formulario, etcétera, y quiero pegar el convencional

if @resource.save then redirect_to ... 
else render "new" 
end 

Respuesta

27

Ponga la directiva de anclaje en la forma y todavía se puede confiar: rendir desde el controlador ...

form_for(@my_model, :url => { :action => "create" , :anchor => "my_anchor" }) 
+3

¡Hombre, por qué la gente lo rechazó! Esa dulce parte de tu conocimiento iluminó mi pequeña habitación oscura durante unos minutos reales. Tengo la ambición de tener una aplicación donde la mayoría de las funciones funcionen incluso sin javascript ¡y esa es una opción realmente maravillosa! Muchas gracias, lo usaré con placer: 'form_for (@reply,: url => create_reply_post_comment_path (@post, @comment,: anchor =>" reply_comment _ # {@ comment.id} ")' – Bachet

+2

+1, entonces limpio y simple estoy celoso no lo pensé –

+0

Guau, esto es genial. No esperaba poder hacer esto, fue una sorpresa agradable de una respuesta. –

1

Y otra cosa ... si se trata de un enlace que estoy usando en realidad, se tiene que agregar un único param para que el navegador piense que está enviando algo nuevo, de lo contrario, se actualiza sin tocar el servidor. Estoy usando:

link_to "REFRESH", refresh_my_model_path(@my_model, :anchor => "my_anchor", :options => {:id => Time.now}) 
1

¿Usar javascript?

<script> 
window.location.hash="ANCHOR"; 
</script> 
+0

Solo asegúrese de que el javascript solo se invoque si hay un error de validación. =) –

1

me desplacé a un ancla con render usando un VAR global y Javascript (como se insinuó por Ibrahim).

En mi regulador Tenía esta:

@anchor = "my_anchor" 
render :action => "edit" 

Y en mi página, he comprobado si tuviera una @anchor mundial, y si es así, rollo a ella con Javascript:

<% if @anchor %> 
    <script type="text/javascript"> 
    window.location.hash = "<%= @anchor %>"; 
    </script> 
<% end %> 
Cuestiones relacionadas