我试图在点击某个按钮后重定向某个人并且我一直收到以下错误:
::加载ActiveModel ForbiddenAttributesError
提取的来源(第20行):
它在@post = Post.new行上抛出错误。
def create
@post = Post.new(params[:post])
if @post.save
redirect_to posts_path, :notice => "Your post was saved"
我对Ruby很新,目前我对这意味着什么很困惑。我只是按照教程,我的工作不起作用。如果有人能提供帮助那就太棒了:D
答案 0 :(得分:3)
@post = Post.new(params[:post])
...不再用于最新版本的rails。问题是它提供的安全性很弱。正在更新其用户配置文件的人(例如)理论上可以插入一个属性,如" administrator:true"将自己更改为管理员(如果存储管理员标志的方式)
强参数现在要求您明确指定要输入的属性。
所以现在我们做......
@post = Post.new(post_params)
我们稍后在控制器中有一个方法来指定允许的属性,看起来像......
def post_params
params.require(:post).permit(:title, :body)
end
答案 1 :(得分:1)
虽然我没有足够的代码专门回答这个问题,但我可能会非常接近(减去一些列/属性命名)。现在strong_params是Rails应用程序的标准,你可能希望做更多的事情:
def create
@post = Post.new(post_params)
if @post.save
redirect_to posts_path, :notice => "Your post was saved"
else
#other stuff here
end
end
private
def post_params
params.require(:post).permit(:content, ....etc) #I took a guess at the attributes you are passing through your params on the create.
end
有关历史/原因的一点额外简单阅读:http://blog.8thlight.com/will-warner/2014/04/05/strong-parameters-in-rails.html
如果您需要任何其他说明,请与我们联系。