2011-02-08 23 views
12

Ho un controller che controlla un modulo di contatto su una pagina di contatto. All'interno del file routes.rb ho una riga che dice match '/contact', :to => 'feedback#new'. Ora quando il modulo è compilato correttamente, tutto funziona correttamente; l'url è '/ contact'. Tuttavia, quando il modulo non è compilato correttamente, il mio controller renders 'new' e l'URL cambia da '/contact' a '/feedback'. Qualcuno può dirmi perché questo accade e come posso risolverlo in modo che se le convalide vengono attivate e la pagina sia visualizzata, l'url sarà ancora /contact e non /feedback? Grazie!Rails: perché l'URL personalizzato cambia quando viene chiamato `render 'new'`?

Il mio codice di controllo: enter image description here

+1

Riesci a elencare il contenuto del file 'config/routes.rb'? [Modifica] Anche il codice di visualizzazione sarebbe d'aiuto. Se stai usando 'form_for (@feedback)', quando il modulo post, sta facendo un POST a '/ feedback' dato che Rails usa URL RESTful. Ricorda che gli URL sono basati su percorsi verso controllori e azioni, NON sul nome della vista che stai rendendo. 'FeedbackController # create' è probabilmente mappato a'/feedback' (controlla 'rake routes') –

+0

Hai ragione' FeedbackController # create' è mappato alla rotta '/ feedback'. Quindi cosa dovrei fare per rispondere alla mia domanda precedente? – agentbanks217

+0

Lo hai mai capito? Sto lottando con questo. – skaz

risposta

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

Questo percorso corrisponderà solo /contact-FeedbackController#new.

Si vuole aggiungere per abbinare la parte "post" per 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 

Il modulo ora cambierà in

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

Usando solo il default form_for cercherà di creare il percorso da a resources nel tuo routes.rb. E, presumo che quella rotta sia resources :feedback che creerà ovviamente percorsi che assomigliano a /feedback.

+1

Proprio per la cronaca, ho dovuto aggiungere ': via =>: get' al #nuovo percorso in Rails 3. – Sooie

Problemi correlati