Ruby on rails 3 Rails:没有与[PUT]匹配的路由/博客/2“;

Ruby on rails 3 Rails:没有与[PUT]匹配的路由/博客/2“;,ruby-on-rails-3,form-for,Ruby On Rails 3,Form For,我正在rails中创建博客应用程序。我有一个创建和更新博客的通用表单 这是edit和new.html.erb的视图 <%= render :partial => "form"%> 当我从“编辑”视图打开表单并单击“更新”按钮时,它会抛出错误: No route matches [PUT] "/blog/2" My routes.rb是: resources :blogs get 'blog', to: 'blogs#index' get '/blog/:id',

我正在rails中创建博客应用程序。我有一个创建和更新博客的通用表单

这是edit和new.html.erb的视图

<%= render :partial => "form"%>
当我从“编辑”视图打开表单并单击“更新”按钮时,它会抛出错误:

   No route matches [PUT] "/blog/2"
My routes.rb是:

 resources :blogs
 get 'blog', to: 'blogs#index'
 get '/blog/:id', to: 'blogs#show', as: 'blog'
我不知道哪里出了问题。我尝试在表单中添加“url:blogs\u path”,它会删除错误,但不会保存编辑更改

谁能帮我看看哪里出了问题


谢谢。好的。我不明白你为什么要违反惯例。无论如何,如果是更新操作,使用资源的
form_
将自动生成操作URL作为放置到
/resources/:id

所以要覆盖这个,你需要做两件事

  • 更新您的路线以支持此操作:
  • 将此行添加到路由文件:

    put'blog/:id'=>'blogs#update',:as=>'update#blog'

    重要的是,你把这一行放在你的“资源:博客”呼叫之上

    二,。指定表单应提交到的URL:

    您将需要像下面这样创建表单标记:

    update_blog_path(@blog)do | f |%>


    试试这个,让我们知道。

    发布您的路线。rb文件我建议您阅读。在控制台中运行
    rake routes
    时,检查是否有“PUT/blog/:id=>blog#update”路由。如果您遵循约定,url实际上应该是
    blogs/:id
    。你自己写过自定义的REST路由吗???@aromero用博客的路由更新了问题。嘿,它正在进行更新操作,但由于我有用于编辑和新建的通用表单,表单无法创建新博客。它给出错误“没有路由匹配{:controller=>”blogs“,:action=>”update“…”,创建新博客时。这是在表单中更新url路径的原因。违背DRY原则,为new创建一个单独的表单。哦,这是唯一的方法吗?ohk,可以这样做。感谢解决方案:-)这不是唯一的方法:)您可以覆盖您的post调用以符合您的喜好,而不必创建单独的表单。如果您愿意,请尝试。B但是,如果你坐下来思考,你将面临一些可以轻松跨越的障碍。:)这是你的选择。只需按照你在更新方面所做的做。:
    post'/blog'=>“blogs”#create'
    。删除:as helper,因为你无法使用它。现在在helper表单中使用URL as
    '/blog'+/:id'
    (如果您有id…,则必须使用条件语句来执行此操作)。开始尝试。
       No route matches [PUT] "/blog/2"
    
     resources :blogs
     get 'blog', to: 'blogs#index'
     get '/blog/:id', to: 'blogs#show', as: 'blog'