2011-02-08 11 views
12

Mam kontroler, który kontroluje formularz kontaktowy na stronie kontaktowej. Wewnątrz pliku routes.rb mam linię, która mówi: match '/contact', :to => 'feedback#new'. Teraz, gdy formularz jest wypełniony poprawnie, wszystko działa poprawnie; adres URL to "/ kontakt". Jeśli jednak formularz nie zostanie wypełniony poprawnie, mój kontroler renders 'new' zmieni adres URL z '/contact' na '/feedback'. Czy ktoś może mi powiedzieć, dlaczego tak się dzieje i jak mogę to naprawić, aby po uruchomieniu sprawdzania poprawności i wyrenderowaniu strony URL nadal będzie oznaczony jako /contact, a nie /feedback? Dzięki!Railsy: Dlaczego niestandardowy adres url zmienia się po wywołaniu `render 'new'`?

Moje kod kontrolera: enter image description here

+1

można wyświetlić zawartość pliku 'config pliku/routes.rb'? [Edytuj] Pomocny będzie również kod widoku. Jeśli używasz 'form_for (@feedback)', gdy formularz wysyła, robi POST do '/ feedback', ponieważ Rails używa RESTful URLs. Pamiętaj, że adresy URL są oparte na trasach do kontrolerów i akcji, a NIE nazwą renderowanego widoku. 'FeedbackController # create' jest prawdopodobnie zamapowany na'/feedback' (sprawdź 'rake routes') –

+0

Masz rację' FeedbackController # create' jest zmapowany na trasę '/ feedback'. Co powinienem zrobić, aby odpowiedzieć na powyższe pytanie? – agentbanks217

+0

Czy kiedykolwiek to rozgryzłeś? Walczę z tym. – skaz

Odpowiedz

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

że trasa będzie tylko dopasować /contact do FeedbackController#new.

Będziemy chcieli, aby dodać dopasować „post” część do 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 

Twoja postać będzie teraz zmienić

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

tylko przy użyciu domyślnego form_for spróbuje utworzyć ścieżkę od a resources w swoim routes.rb. I zakładam, że ta trasa to resources :feedback, co oczywiście utworzy trasy, które wyglądają jak /feedback.

+1

Po prostu do wykonania, musiałem dodać ': via =>: get' do ścieżki #new w Rails 3. – Sooie