【问题标题】:Getting Started With Rails Tutorial: 5.7 Showing posts -- No Forbidden Attributes ErrorRails 入门教程:5.7 显示帖子——无禁止属​​性错误
【发布时间】:2013-08-02 11:18:50
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

文档实际上具有误导性,您是对的。

如果您按照第 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))

【讨论】:

    【解决方案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

    您的控制器中有此代码。

    【讨论】:

      【解决方案3】:

      Doh... 逐字逐句地遵循文档——是的,它具有误导性。

      许可证已经在 post_params 方法中:

      def post_params
        params.require(:post).permit(:title, :text)
      end
      

      【讨论】:

      • 现在你(和我)将永远不会忘记如何允许参数进行更新和创建。这将持续一生:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-15
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      相关资源
      最近更新 更多