Ruby on rails 尝试更新数据库条目时发生路由错误
所以我有一个关于电影的数据库。我已经在我的路线文件中为它做了一个Ruby on rails 尝试更新数据库条目时发生路由错误,ruby-on-rails,Ruby On Rails,所以我有一个关于电影的数据库。我已经在我的路线文件中为它做了一个resources:movies条目,它应该提供所需的每一条路线 这是我的电影控制器: 这就是我在which.com/movies/1/edit上编辑电影时遇到的错误: Routing Error No route matches [POST] "/movies/1/edit" 以下是目前的电影路线: movies_path GET /movies(.:format) movies#index POST /m
resources:movies
条目,它应该提供所需的每一条路线
这是我的电影控制器:
这就是我在which.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/编辑。但为什么呢?我输入的线路不应该给我吗
编辑:
链接到“电影”视图:您的问题是,您正在编辑页面上的表单上调用帖子,因此出现错误
没有路径匹配[POST]“/movies/1/edit”
没有看到您的代码,这只是一个猜测,但是:
您的
MoviesController
需要在编辑操作中设置电影
def edit
@movie = Movie.find(params[:id])
end
或者更好的方法是,在您的操作之前,将代码晾干并创建一个,为您的restful路由设置它
before_action :set_movie, only: [:show, :edit, :update, :destroy]
def set_movie
@movie = Movie.find(params[:id])
end
好吧,我让表单使用PUT:{:method=>:PUT}do | f |%>但是这并没有改变我没有电影的PUT路径/:id/edit这一事实。我怎么走那条路线?我是说。。。资源应该为我做这件事吗?在您的控制器中,在编辑操作中,将电影加载到一个实例变量中(例如,@movie=movie.find(params[:id])
),然后执行form_for@movie
使用了另一个人建议的解决方案,但两种解决方案都存在丢失路由问题。你知道这是为什么吗?在你的视图中有一些东西试图生成一个通用表单到电影
,因为表单默认为一篇文章。在我的原始文章中发布指向我视图的链接,以便你可以看到。我不认为我在那里所做的是错误的,我在编辑用户信息时使用相同的方法,它可以工作。rake routes仍然不显示电影/1/edit的PUT路由。也尝试了其他版本,但出于某种原因,它仍然不想为其创建路由。您不需要在表单上指定该方法,因为Rails将自动处理该问题。现在为电影/edit.html.erb在您的回购中签入的内容应该有效是的,但是当我在表单中删除它时,它会尝试再次发布它而不是放置。但是我想主要的问题是我需要的路线不在那里,这些路线看起来还不错。当您导航到编辑页面或实际尝试提交该页面时,是否会发生错误?