3

我一直在关注这个 Rails 教程:

http://guides.rubyonrails.org/getting_started.html

第 5.7 节告诉我应该期待 ActiveModel::ForbiddenAttributesError

问题是,我没有得到错误。它在没有 permit 关键字的情况下工作。

我的创建方法如下所示:

  def create
    @post = Post.new(post_params)
    @post.save
    redirect_to @post
  end

我正在使用 Rails 4.0 和 Ruby 2.0。知道为什么强参数安全功能不起作用吗?

4

3 回答 3

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))
于 2013-08-02T11:29:39.863 回答
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

您的控制器中有此代码。

于 2013-08-02T11:33:05.753 回答
1

Doh ...逐字逐句地遵循文档-是的,这是误导性的。

许可证已经在 post_params 方法中:

def post_params
  params.require(:post).permit(:title, :text)
end
于 2013-08-02T11:43:05.373 回答