我有一个 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/