我在跟踪rails教程时遇到了错误。经过一些研究,将@post = Post.new(params[:post])
更改为@post = Post.new(post_params)
解决了我的问题,但我仍然不太了解原因。是什么造成了不同?为什么我可以在params[:id]
中使用show
?
我的posts_controller.rb:
class PostsController < ApplicationController
def new
end
def create
@post = Post.new(post_params)
@post.save
redirect_to @post
end
def show
@post = Post.find(params[:id])
end
private
def post_params
params.require(:post).permit(:title, :text)
end
end
答案 0 :(得分:0)
答案很简单,当您尝试创建或编辑记录时,会应用强参数系统。因此,即使使用未经许可的参数,show动作中的简单SELECT / find也能正常工作。
但是,您必须在控制器中为每个INSERT或UPDATE操作显式允许参数。这就是你对params.require(:post).permit(:title, :text)
所做的。您已经说过,如果:post one存在,则允许使用标题和文本参数。