我一直在关注这个Rails教程:
http://guides.rubyonrails.org/getting_started.html
5.7节告诉我,我应该期待一个ActiveModel :: ForbiddenAttributesError
问题是,我没有得到错误。它没有permit关键字。
我的create方法如下所示:
def create
@post = Post.new(post_params)
@post.save
redirect_to @post
end
我正在使用Rails 4.0和Ruby 2.0。知道为什么强参数安全功能不起作用吗?
答案 0 :(得分:4)
文档实际上是误导,你是对的。
如果您按照第5.6章
所示编码控制器def create
@post = Post.new(post_params)
@post.save
redirect_to @post
end
private
def post_params
params.require(:post).permit(:title, :text)
end
您已经允许使用参数title
和text
。
下一章(5.7)假设您尚未使用permit
- 方法。
如果您将第2行更改为:
@post = Post.new(post_params)
如截图所示,错误将被抛出。此外,第5.7章中的“修复”并没有像您那样定义新的私有方法post_params
,而是应用内联修复。
@post = Post.new(params[:post].permit(:title, :text))
答案 1 :(得分:2)
你有什么机会在posts_controller中使用这段代码:
private
def post_params
params.require(:post).permit(:title, :text)
end
根据rails 4中的新安全措施惯例 http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters 如果你有这个,那就意味着你允许使用这些参数来创建和更新模型。
正如您所说,您正在关注本教程 http://guides.rubyonrails.org/getting_started.html#saving-data-in-the-controller
你的控制器中有这个代码。
答案 2 :(得分:1)
Doh ......跟着文档逐字逐句 - 是的,这是误导性的。
许可证已经在post_params方法中:
def post_params
params.require(:post).permit(:title, :text)
end