我想创建编辑动作。但是当我提交编辑时,浏览器显示错误。我无法找到错误的位置
的routes.rb
resources :posts
root 'posts#index'
帮助form_for谁写错误
<%= form_for :post, url: root_path(@post), method: :patch do |f| %>
怎么修复? 抱歉我的英文不好
答案 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