2011-02-08 14 views
12

Tengo un controlador que controla un formulario de contacto con nosotros en una página de contacto. Dentro del archivo routes.rb tengo una línea que dice match '/contact', :to => 'feedback#new'. Ahora, cuando el formulario se completa correctamente, todo funciona bien; la url es '/ contacto'. Sin embargo, cuando el formulario no se completa correctamente, mi controlador renders 'new' y la URL cambian de '/contact' a '/feedback'. ¿Puede alguien decirme por qué sucede esto y cómo puedo solucionarlo de modo que si se activan las validaciones y se muestra la página, la url será /contact fija y no /feedback? ¡Gracias!Rieles: ¿Por qué la URL personalizada cambia cuando se llama a 'render' new'`?

Mi código del controlador: enter image description here

+1

¿Puede enumerar el contenido de su archivo 'config/routes.rb'? [Editar] El código de vista también ayudaría. Si está utilizando 'form_for (@feedback)', cuando el formulario se publique, estará haciendo una POST a '/ feedback' ya que Rails usa URL RESTful. Recuerde que las URL se basan en rutas a controladores y acciones, NO el nombre de la vista que está representando. 'FeedbackController # create' es posible que se asigne a'/feedback' (compruebe 'rake routes') –

+0

Tiene razón' FeedbackController # create' está asignado a la ruta '/ feedback'. Entonces, ¿qué debo hacer para responder a mi pregunta anterior? – agentbanks217

+0

¿Alguna vez resolvió esto? Estoy luchando con esto. – skaz

Respuesta

9
match '/contact', :to => 'feedback#new' 

Esa ruta sólo coincidirá /contact-FeedbackController#new.

Usted tendrá que añadir para que coincida con la parte "posterior" a FeedbackController#create

match '/contact', :to => 'feedback#create', :via => :post, :as => :post_contact 
# change :as => to whatever path for this you'd like to use, ex :as => :create_contact 

Su forma ahora cambiará a

= form_for(@feedback), :url => post_contact_path do |f| 

Simplemente usando el valor por defecto form_for tratará de crear la ruta de a resources en su routes.rb. Y, supongo que esa ruta es resources :feedback que, por supuesto, creará rutas que se parecen a /feedback.

+1

Solo FYI, tuve que agregar ': via =>: get' a la # nueva ruta en Rails 3. – Sooie

Cuestiones relacionadas