Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 尝试更新数据库条目时发生路由错误_Ruby On Rails - Fatal编程技术网

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”

没有看到您的代码,这只是一个猜测,但是:

  • 需要更改表单以使用PUT方法
  • 用于获取编辑的链接不正确,需要是get请求

  • 您的
    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在您的回购中签入的内容应该有效是的,但是当我在表单中删除它时,它会尝试再次发布它而不是放置。但是我想主要的问题是我需要的路线不在那里,这些路线看起来还不错。当您导航到编辑页面或实际尝试提交该页面时,是否会发生错误?