Rails: Почему пользовательский URL меняется, когда вызывается `render 'new'`? - PullRequest
12 голосов
/ 08 февраля 2011

У меня есть контроллер, который управляет формой обратной связи на странице контактов.Внутри файла routes.rb есть строка с надписью match '/contact', :to => 'feedback#new'.Теперь, когда форма заполнена правильно, все работает нормально;URL-адрес «/ контакт».Однако, если форма заполнена неправильно, мой контроллер renders 'new' и URL-адрес изменяются с '/contact' на '/feedback'.Может кто-нибудь сказать мне, почему это происходит и как я могу это исправить, чтобы, если проверки запускались и страница отображалась, URL-адрес будет /contact неподвижным, а не /feedback?Спасибо!

Код моего контроллера: enter image description here

Ответы [ 2 ]

9 голосов
/ 13 июня 2011
match '/contact', :to => 'feedback#new'

Этот маршрут будет соответствовать только от /contact до FeedbackController#new.

Вы хотите добавить, чтобы соответствовать "post" часть к 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

Ваша форма теперь изменится на

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

Просто по умолчаниюform_for попытается создать путь из resources в вашем routes.rb.И я предполагаю, что этот маршрут resources :feedback, который, конечно, создаст маршруты, которые выглядят как /feedback.

2 голосов
/ 13 июня 2011

в вашем route.rb вместо вашего /contact соответствия:

resources :contact, :as => :feedback, :controller => :feedback, :only => [:new, :create]

http://guides.rubyonrails.org/routing.html#customizing-resourceful-routes

...