Rails入门教程:5.7显示帖子 - 没有禁止的属性错误

时间:2013-08-02 11:18:51

标签: ruby-on-rails ruby strong-parameters

我一直在关注这个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。知道为什么强参数安全功能不起作用吗?

3 个答案:

答案 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

您已经允许使用参数titletext

下一章(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