2011-04-27 193 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