我不确定我做错了什么。我有一个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
“匹配'/项目'这一行是他们总是被家里处理的原因。
答案 0 :(得分:0)
告诉我你的路线文件......... 问题出在您的路径文件的第二行和第三行中,您没有在第二行中指定http动词,因此它将转到主动作而不是创建动作...所以请在您的路径中指定动词路由文件以防止将来出现此错误...
答案 1 :(得分:0)
您的路线文件应为此
SolarMesh::Application.routes.draw do
resources :projects
match '/projects' => 'projects#home'
match '/' => 'projects#home'
end
这将解决您的问题
因为当您在资源声明之前指定这些URL时,他们将索引页面限制为现在运行它应该运行