我被困在第5.12节,我无法弄清楚params [:post]是如何为零的。 错误消息指定在此代码的第三行中发生错误:
def edit
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :text))
redirect_to @post
else
render 'edit'
end
end
我的posts_controller文件如下所示:
class PostsController < ApplicationController
def new
@post = Post.new
end
def index
@posts = Post.all
end
def create
@post = Post.new(params.require(:post).permit(:title, :text))
if @post.save
redirect_to @post
else
render 'new'
end
end
def show
@post = Post.find(params[:id])
end
def edit
@post = Post.find(params[:id])
if @post.update(params[:post].permit(:title, :text))
redirect_to @post
else
render 'edit'
end
end
end
答案 0 :(得分:1)
首先,edit
操作用于呈现edit
帖子页面。所以,你不会得到params [:post]。它总是零。因此,错误。
所以你的edit
行动应该是:
def edit
@post = Post.find(params[:id])
end
在此之后,您需要在控制器中添加以下update
操作,该操作将在edit
帖子页面上提交表单时调用。
def update
@post = Post.find(params[:id])
if @post.update(params.require(:post).permit(:title, :text))
redirect_to @post
else
render 'edit'
end
end
这将解决当前的问题。
注意:强>
我强烈建议将params.require(:post).permit(:title, :text)
的重复逻辑移到@ user3317140建议的私有方法中。
答案 1 :(得分:0)
修改强>:
add a check for :post
if params.has_key?(:post)
@post.update(params[:post].permit(:title, :text))
redirect_to @post
else
render 'edit'
end
在PostsController类的末尾添加它&lt; ApplicationController中
private
def post_params
params.require(:post).permit(:title, :text)
end