2012-11-02 46 views
0

我不确定我在做什么错。我有一个项目资源:由控制器处理的Rails POST#home

resources :projects 

在ProjectsController#新的,我创建一个项目,并在new.html.erb使其:

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

这被发送,但而不是由被处理项目#创建它正在由家庭行动处理:

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 

编辑: 我发现了这个问题。

这是老路线文件:

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

end 

线“匹配‘/项目’”是它总是被处理家里的原因。

+0

你可以请你展示你的路线文件 –

+0

也许你应该从你的项目控制器发布新的和创建方法代码 – MikeC

+0

也检查你的索引行动的网址... –

回答

0

让我看看你的路线文件......... 问题是你的路线文件的第二和第三行你没有在第二行中指定http动词,因此它会去到家庭的行动,而不是创建行动......所以请告知你的路线文件中的动词,以防止将来出现此错误...

0

路线文件应该是这个

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

end 

这将解决您的问题

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

+0

这条线不是多余的吗? 匹配'/'=>'项目#home' –

+0

资源:项目提供了回家的路由为'/' –

+0

关键是当您保持/项目在默认设置之上时,它会导致所有类型的路由吞食问题的动词(PUT,Get,Delete,Post)由家庭处理,并且相应的操作(例如创建或索引)不会被调用 –