2011-04-27 190 views
0

我不知道是什麼原因,我的應用沒有響應任何POST請求,這是一個非REST的URL。路由不工作

下面是我的routes.rb文件。

constraints(Subdomain) do 
    resources :invitations 

    resources :settings, :only => [:index, :create, :destroy] 
    scope "/settings" do 
     get "/departments" => "settings#departments" 
     get "/job_types" => "settings#job_types" 
     get "/industries" => "settings#industries" 
     get "/functional_areas" => "settings#functional_areas" 
     get "/managers" => "settings#managers" 
     get "/hrs_responsible" => "settings#hrs_responsible" 
     get "/welcome_text" => "settings#welcome_text" 
     post "/save_welcome_text" => "settings#save_welcome_text" <------- 
    end 
    end 

我認爲文件中,我有

=form_for(@setting), :url => "/settings/save_welcome_text", :method => :post do |f| 
    - All the form fields here. 
    - f.submit "Save" 

這個要點包含生成的HTML,以及相應的服務器日誌。 https://gist.github.com/943984

當我點擊提交時,我看到「路由錯誤」,沒有這樣的路由存在。從服務器日誌中,我可以嗅探到請求是作爲POST請求發送的。 但是,如果我將它從routes.rb文件中的「post」更改爲「匹配」,則可以使用。所有GET請求都正常工作。 我錯過了什麼嗎?

+0

你覺得爲什麼不工作呢?顯示你如何試圖稱呼它。顯示你的鏈接 – fl00r 2011-04-27 08:57:03

+0

那麼,我有一個「form_for(@setting),:url =>」/ settings/save_welcome_text「,:method =>:post」,它會拋出一個錯誤,表示沒有路由存在。 – Deepak 2011-04-27 09:07:57

+0

看看源代碼並告訴我「

」標籤 – fl00r 2011-04-27 09:28:49

回答

1

您應該指定methodhtml

=form_for(@setting), :url => "/settings/save_welcome_text", :html => { :method => :post } do |f| 
+0

工作很好,謝謝隊友:) – Deepak 2011-04-27 10:03:35

0

的方法的使用獲得併發布到您的routes.rb是從我的理解只適用於一個資源塊內部成員或收集的路線。

當你這樣做,否則你必須使用匹配,如果你只是想使其可用於後,那麼你可以像這樣指定它:

match "/save_welcome_text" => "settings#save_welcome_text", :via => :post 
+0

嗨,感謝您的答覆。我檢查了你的上述建議,但仍然給我一個錯誤。當我使用'match'/ save_welcome_text「=>」settings#save_welcome_text「'時,它可以工作。但它匹配所有我不想要的請求,我希望它只接受POST請求。 – Deepak 2011-04-27 09:54:51

+0

你確定這個請求是真的通過郵件提交嗎?如果你從沒有:via語法的時候檢查日誌,它是否表示它是post?你有沒有改變form_for像fl00r建議? – DanneManne 2011-04-27 10:00:42