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