ruby-on-rails - 使用 belongs_to 创建强参数

标签 ruby-on-rails ruby strong-parameters

我有一个 Course 模型,它属于一个 Grade。我正在尝试通过以下操作在我的 seeds.rb 文件中创建类(class):

Course.create(
  ActionController::Parameters.new(
    grade: Grade.all.sample
  ).permit(:grade_id)
)

这将创建一个新的 Course 对象,但 grade_id 为 nil。我做错了什么?

最佳答案

强参数做了两件事:一是参数方面的白名单(因此散列中的键必须与传递给 permit 的参数匹配,即使设置 grade 最终设置 grade_id.

它做的第二件事是限制传递的参数类型 - 当攻击者能够将参数设置为精心构造的哈希/数组等时,就会发生很多最近的安全问题,而您只是期望字符串或数字。

因此,任何非标量值的内容都将被剔除,只有在您表明需要数组/散列时才允许使用数组/散列。特别是您的 activerecord 对象将被删除。

您可以切换到设置 grade_id 而不是在这里使用强参数 - 在这种情况下没有不受信任的用户输入。

关于ruby-on-rails - 使用 belongs_to 创建强参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985424/

相关文章:

ruby-on-rails - 在 Rails 强参数中只允许某些可能的值

ruby-on-rails - 在 Heroku 中添加免费的 Pascal 编译器

ruby-on-rails - Rails App Wicked 路由错误

ruby - 使用 Mechanize 的异步请求

ruby-on-rails - 如何在 Rails 中为我的整个应用捕获 ArgumentError?

ruby-on-rails - Rails 强参数 : How to accept both model and non-model attributes?

javascript - OmniAuth 无法使用 Jquery Ajax 调用

ruby-on-rails - 安装 rails 后,如何在 amazon ec2 实例上运行 rails server?

ruby-on-rails - 如果使用 Ruby on Rails 在 redis 中存在,我如何更新 HKEYS 字段

ruby-on-rails - 为什么对 params 哈希进行切片会对批量分配造成安全问题?