没有路线匹配[PATCH]“/”

时间:2014-11-18 08:19:54

标签: ruby-on-rails

我想创建编辑动作。但是当我提交编辑时,浏览器显示错误。我无法找到错误的位置

的routes.rb

resources :posts
root 'posts#index'

帮助form_for谁写错误

<%= form_for :post, url: root_path(@post), method: :patch do |f| %>

怎么修复? 抱歉我的英文不好

2 个答案:

答案 0 :(得分:0)

你应该只有:

<%= form_for @post do |f| %>

Rails将创建正确的操作路径并自动使用正确的HTTP方法。

您的示例不能直接使用,因为您使用了错误的URL帮助程序。您不希望路由到根路径,而是发布#upcate action,因此它应该是:url: post_path(@post)

您还应该设置@post变量来保存您要更新的Post的实际实例:

def edit
  @post = Post.find(params[:id])
end

答案 1 :(得分:0)

您的错误是您将表单提交到root_path(@post),但root_path是获取请求。 您可以使用以下代码:

<%= form_for @post, url: post_path(@post), method: :put do |f| %>

在posts_controller.rb中,编辑操作为:

def edit
 @post = Post.find(params[:id])
end

更新操作是:

  def update
    respond_to do |format|
      if @post.update(post_params)

       format.html { redirect_to posts_path, notice: 'Post was successfully updated.' }
       format.json { head :no_content }
     else
       format.html { render action: 'edit' }
       format.json { render json: @post.errors, status: :unprocessable_entity }
     end
   end
 end