Rails POST由控制器#home处理

时间:2012-11-02 13:52:50

标签: ruby-on-rails routes

我不确定我做错了什么。我有一个Projects资源:

resources :projects

在ProjectsController#new中,我正在创建一个项目并在new.html.erb中呈现它:

<%= form_for @project do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name%><br/>
  <%= f.submit  %>
<% end %>

这会被POSTed但不是由Projects#处理,而是由home动作处理它:

Started POST "/projects" for 127.0.0.1 at 2012-11-02 08:47:36 -0500
Processing by ProjectsController#home as HTML

以下是我的路线:

                    /                            projects#home
    projects        /projects(.:format)          projects#home
             GET    /projects(.:format)          projects#index
             POST   /projects(.:format)          projects#create
 new_project GET    /projects/new(.:format)      projects#new
edit_project GET    /projects/:id/edit(.:format) projects#edit
     project GET    /projects/:id(.:format)      projects#show
             PUT    /projects/:id(.:format)      projects#update
             DELETE /projects/:id(.:format)      projects#destroy

EDITED: 我发现了问题。

这是旧路线档案:

SolarMesh::Application.routes.draw do
  match '/' => 'projects#home'
  match '/projects' => 'projects#home'
  resources :projects

end

“匹配'/项目'这一行是他们总是被家里处理的原因。

2 个答案:

答案 0 :(得分:0)

告诉我你的路线文件......... 问题出在您的路径文件的第二行和第三行中,您没有在第二行中指定http动词,因此它将转到主动作而不是创建动作...所以请在您的路径中指定动词路由文件以防止将来出现此错误...

答案 1 :(得分:0)

您的路线文件应为此

SolarMesh::Application.routes.draw do
   resources :projects
   match '/projects' => 'projects#home'
   match '/' => 'projects#home'

end

这将解决您的问题

因为当您在资源声明之前指定这些URL时,他们将索引页面限制为现在运行它应该运行