尝试更新数据库条目时路由错误

时间:2014-01-17 18:28:26

标签: ruby-on-rails

所以我有这个关于电影的数据库。我已经为我的路由文件输入了resources :movies,这应该为它提供所需的每条路径。

这是我的电影控制器:https://github.com/Veske/form/blob/ryhm/app/controllers/movies_controller.rb

这是我尝试在whatever.com/movies/1/edit上编辑电影时遇到的错误:

Routing Error
No route matches [POST] "/movies/1/edit"

这些是电影的路线:

movies_path  GET     /movies(.:format)   movies#index
POST     /movies(.:format)   movies#create
new_movie_path   GET     /movies/new(.:format)   movies#new
edit_movie_path  GET     /movies/:id/edit(.:format)  movies#edit
movie_path   GET     /movies/:id(.:format)   movies#show
PATCH    /movies/:id(.:format)   movies#update
PUT  /movies/:id(.:format)   movies#update
DELETE   /movies/:id(.:format)   movies#destroy

现在可以清楚地看到,电影/:id / edit确实没有POST。但那是为什么呢?我输入路线的线路不应该给我吗?

编辑:

链接到电影视图:https://github.com/Veske/form/blob/ryhm/app/views/movies/edit.html.erb

2 个答案:

答案 0 :(得分:1)

您的问题是您在编辑页面上的表单上调用了POST,这就是为什么您收到错误No route matches [POST] "/movies/1/edit"

如果没有看到您的代码,这只是猜测,但要么:

  1. 需要更改表单以使用PUT方法。
  2. 要进行编辑的链接不好,需要是GET请求。

答案 1 :(得分:1)

您的MoviesController需要在编辑操作中设置影片

def edit
  @movie = Movie.find(params[:id])
end

或者更好的是,干掉你的代码并创建一个before_action,为你的宁静路线设置它

before_action :set_movie, only: [:show, :edit, :update, :destroy]

def set_movie
  @movie = Movie.find(params[:id])
end