Ruby on rails 为什么我的控制器重定向到显示?
在我的rake路线中,我得到:Ruby on rails 为什么我的控制器重定向到显示?,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,在我的rake路线中,我得到: project_todos GET /project_todos(.:format) project_todos#index POST /project_todos(.:format) project_todos#create new_project_todo GET /project_todos/n
project_todos GET /project_todos(.:format) project_todos#index
POST /project_todos(.:format) project_todos#create
new_project_todo GET /project_todos/new(.:format) project_todos#new
edit_project_todo GET /project_todos/:id/edit(.:format) project_todos#edit
project_todo GET /project_todos/:id(.:format) project_todos#show
PUT /project_todos/:id(.:format) project_todos#update
DELETE /project_todos/:id(.:format) project_todos#destroy
project_todos_toggle_status POST /project_todos/toggle_status(.:format) project_todos#toggle_status
发件人:
在我的视图中,有一行看起来像:
<%= link_to 'Toggle Project', project_todos_toggle_status_path(id: todo.id), method: "post" %>
routes.rb
resources :project_todos do
member do
post :toggle_status
end
end
查看代码:
<% @todos.each do |todo| %>
<li class="todo_item todo"><%= todo.title %></li>
<%= todo.id%>
<%= link_to 'Toggle Project', toggle_status_project_todo_path(todo), method: "post" %>
<% end %>
更新#2
此类错误是否会导致此问题:
尝试将您的
项目待办事项
行移动到路由中资源:项目待办事项
行上方。rb
然后,将在id版本之前找到自定义路由。尝试将您的
项目待办事项
行移动到路由中资源:项目待办事项
行上方。rb
然后将在id版本之前找到自定义路由。我相信您正在尝试为单个资源项目“切换\u状态”,对吗?在Rails 3中描述此路线的更常见方法如下:
resources :project_todos do
member do
post :toggle_status
end
end
这将在路由文件中生成确定的顺序:
toggle_status_project_todo POST /project_todos/:id/toggle_status(.:format) project_todos#toggle_status
project_todos GET /project_todos(.:format) project_todos#index
POST /project_todos(.:format) project_todos#create
new_project_todo GET /project_todos/new(.:format) project_todos#new
edit_project_todo GET /project_todos/:id/edit(.:format) project_todos#edit
project_todo GET /project_todos/:id(.:format) project_todos#show
PUT /project_todos/:id(.:format) project_todos#update
DELETE /project_todos/:id(.:format) project_todos#destroy
允许您在视图中编写:
<%= link_to 'Toggle Project', toggle_status_project_todo_path(@todo), method: "post" %>
哪个会发到“http://localhost:3000/project_todos/1/toggle_status“我相信您正在尝试为单个资源项目ToDo“切换\u状态”,对吗?在Rails 3中描述此路线的更常见方法如下:
resources :project_todos do
member do
post :toggle_status
end
end
这将在路由文件中生成确定的顺序:
toggle_status_project_todo POST /project_todos/:id/toggle_status(.:format) project_todos#toggle_status
project_todos GET /project_todos(.:format) project_todos#index
POST /project_todos(.:format) project_todos#create
new_project_todo GET /project_todos/new(.:format) project_todos#new
edit_project_todo GET /project_todos/:id/edit(.:format) project_todos#edit
project_todo GET /project_todos/:id(.:format) project_todos#show
PUT /project_todos/:id(.:format) project_todos#update
DELETE /project_todos/:id(.:format) project_todos#destroy
允许您在视图中编写:
<%= link_to 'Toggle Project', toggle_status_project_todo_path(@todo), method: "post" %>
哪个会发到“http://localhost:3000/project_todos/1/toggle_status“我认为它确实需要移动,但没有发生任何变化,我重新启动了rails,以便它能够获取新的路由。您可以尝试将其作为收集路由添加到项目\u todos资源中-请看,我认为它确实需要移动,但是什么都没有改变,我重新启动了rails,这样它就可以获取新的路由。您可以尝试将其作为收集路由添加到project_todos资源中-查看url看起来是否正确,但我得到以下错误:
没有与[get]匹配的路由“/project_todos/1/toggle_status”
它为什么要尝试执行get?请检查指向的链接,并且路由文件与我的匹配。单击链接时,日志/development.log文件的输出是什么?我正在Rails 3.2.7上进行测试。另外,请检查您的js资产,如果您使用的是jquery,我相信您应该包括jquery_ujs,以使方法post功能正常工作。我已经更新了上面的内容,并进行了复制粘贴,因此这正是我所拥有的。我所做的唯一更改是从@todo改为todo,原因很明显。我在一个单独的应用程序中重新创建了它,它可以工作,那么还有什么可能呢?查看从html生成的URL:
,那么如何在单击链接和获取错误之间找出问题所在?该URL看起来是正确的,但是我得到了以下错误:没有与[get]匹配的路由“/project\u todos/1/toggle\u status”
它为什么要尝试执行get?检查指向的链接,路由文件与我的匹配。单击链接时,日志/development.log文件的输出是什么?我正在Rails 3.2.7上进行测试。另外,请检查您的js资产,如果您使用的是jquery,我相信您应该包括jquery_ujs,以使方法post功能正常工作。我已经更新了上面的内容,并进行了复制粘贴,因此这正是我所拥有的。我所做的唯一更改是从@todo改为todo,原因很明显。我在一个单独的应用程序中重新创建了它,它可以工作,那么还有什么可能呢?查看从html生成的URL:
,那么如何在单击链接和获取错误之间找出问题所在?