路线无效

时间:2011-04-27 08:52:10

标签: ruby-on-rails ruby ruby-on-rails-3

我不知道为什么我的应用不响应任何非REST网址的POST请求。

下面是我的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请求都可以正常工作。 我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您应在method块中指定html

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

答案 1 :(得分:0)

使用方法get和post在您的routes.rb是我所理解的,仅适用于资源块内的成员或收集路由。

当你这样做,否则你必须使用匹配,如果你只想让它可用于发布,那么你可以这样指定:

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