【问题标题】:Rails 4 - controller strong params - generated with scaffoldRails 4 - 控制器强参数 - 使用脚手架生成
【发布时间】:2016-01-03 03:33:27
【问题描述】:

我正在尝试在 Rails 4 中制作应用程序。

我使用脚手架生成器作为我的资源起点。

我注意到,当我在这个板上提问时,人们会评论我在控制器中的强参数定义的形式。

脚手架生成器以这种格式创建它们:

def industry_params
      params[:industry].permit(:sector, :icon)
end

大多数展示如何将强参数列入白名单的资源都显示这种格式。

def industry_params
  params.require(:industry).permit(:sector, :icon)
end

http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters.html

rails 脚手架生成器创建这个方法的方式有什么问题吗?

【问题讨论】:

    标签: ruby-on-rails strong-parameters


    【解决方案1】:

    require 方法可确保存在特定参数,如果未提供,则 require 方法会引发错误。它为传递给 require 的键返回一个 ActionController::Parameters 的实例。

    permit 方法返回参数对象的副本,只返回允许的键和值。

    正如您在使用脚手架的默认系统时看到的,我们需要检查params 中是否有任何值,而如果缺少,require 会抛出错误。

    【讨论】:

    • 嗨,Emu,第一个变体(由脚手架创建)不使用单词 require - 所以您的评论是否暗示它以某种方式被暗示或在脚手架生成器创建的版本中有所暗示?恐怕我不明白这两个版本的方法之间的区别。
    • 在第一个过程中,它只会假设您将在params[:industry] 中获得属性,但如果它不存在,那么您必须使用params[:industry].present? 检查它,但在第二个系统中如果@987654325 @ 不存在它会引发错误。这是基本的区别。
    • 好的,如果我很高兴在表没有任何保存的属性时没有收到错误消息,那么我可以坚持使用脚手架生成器样式?
    • 是的。但是使用第二种方法会更安全。
    猜你喜欢
    • 1970-01-01
    • 2016-10-21
    • 1970-01-01
    • 2014-12-21
    • 2012-09-06
    • 2014-08-30
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多