2011-02-08 19 views
12

我有一個控制器,可以在聯繫頁面上控制聯繫我們的表單。在routes.rb文件中,我有一行說match '/contact', :to => 'feedback#new'。現在當表格填寫正確時,一切正常;網址是'/ contact'。但是,如果表格填寫不正確,我的控制器renders 'new'和URL從'/contact'更改爲'/feedback'。有人可以告訴我爲什麼會發生這種情況,以及我如何解決這個問題,以便如果驗證被觸發並且頁面被渲染,那麼url將會是/contact,而不是/feedback?謝謝!Rails:爲什麼在調用`render'new'`時自定義url會被改變?

我的控制器代碼: enter image description here

+1

你可以列出你`配置/ routes.rb`文件的內容? [編輯]視圖代碼也會有幫助。如果您使用`form_for(@feedback)`,當表單發佈時,它會對`/ feedback`進行POST,因爲Rails使用RESTful URL。請記住,URL是基於控制器和操作的路由,而不是您要呈現的視圖的名稱。 `FeedbackController#create`可能映射到`/ feedback`(檢查`rake routes`) – 2011-02-08 17:35:38

+0

你是對的`FeedbackController#create`映射到`/ feedback`路由。那麼我應該怎麼做才能回答我的上述問題? – agentbanks217 2011-02-08 18:25:14

回答

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

這條路只會匹配/contactFeedbackController#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將嘗試創建從路徑在您的routes.rb中輸入resources。而且,我假設路線是resources :feedback這當然會創建看起來像/feedback的路線。

相關問題