2011-02-08 3 views
12

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

Мой код контроллера: enter image description here

+1

Вы можете просмотреть содержимое вашей 'конфигурации/routes.rb' файл? [Изменить] Код просмотра также поможет. Если вы используете 'form_for (@feedback)', когда сообщения формы, он делает POST для '/ feedback', так как Rails использует URL RESTful. Помните, что URL-адреса основаны на маршрутах к контроллерам и действиям, а не по имени отображаемого представления. 'FeedbackController # create', скорее всего, сопоставляется с'/feedback' (проверьте 'rake routes') –

+0

Вы правы' FeedbackController # create' отображается на маршрут '/ feedback'. Итак, что мне делать, чтобы ответить на мой вышеупомянутый вопрос? – agentbanks217

+0

Вы когда-нибудь это выясняли? Я борюсь с этим. – skaz

ответ

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

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

Вы хотите добавить, чтобы соответствовать «пост» часть в 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 будет пытаться создать путь от a resources в вашем routes.rb. И, я предполагаю, что маршрут resources :feedback, который, конечно же, создаст маршруты, которые выглядят как /feedback.

+1

Просто FYI, мне пришлось добавить ': via =>: get' в # новый путь в Rails 3. – Sooie

Смежные вопросы