Ruby on rails Rails POST由控制器处理#home

Ruby on rails Rails POST由控制器处理#home,ruby-on-rails,routes,Ruby On Rails,Routes,我不确定我做错了什么。我有一个项目资源: resources :projects 在ProjectsController#new中,我正在创建一个项目并将其呈现在new.html.erb中: <%= form_for @project do |f| %> <%= f.label :name %> <%= f.text_field :name%><br/> <%= f.submit %> <% end %>

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

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

<%= form_for @project do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name%><br/>
  <%= f.submit  %>
<% end %>
以下是我的路线:

                    /                            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
编辑: 我发现了问题

这是旧路由文件:

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

end

“match'/projects'”这一行是home始终处理它的原因。

显示您的路由文件。。。。。。。。。
问题出现在路由文件的第二行和第三行中,您没有在第二行中指定http谓词,因此它将转到主操作而不是创建操作…因此请在路由文件中指定谓词,以防止将来出现此错误…

您的路由文件应为

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

end
这会解决你的问题


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

你能显示你的路由文件吗?也许你应该从你的项目中发布新的和创建方法代码。所以检查你的索引操作的url…我用路由编辑了这个问题文件谢谢你的评论。这行不是多余的吗?匹配“/”=>“projects#home”参考资料:project以“/”的形式提供到home的路径问题的关键是,当您将/projects保持在defaul之上时,它会导致路由阻塞问题,所有类型的动词(PUT、Get、Delete、Post)都由home处理,并且不会调用相应的操作,例如create或index
SolarMesh::Application.routes.draw do
   resources :projects
   match '/projects' => 'projects#home'
   match '/' => 'projects#home'

end