gpt4 book ai didi

ruby-on-rails - 何时在 ActionController::Parameters 中使用切片与许可?

转载 作者:行者123 更新时间:2023-12-04 02:15:02 24 4
gpt4 key购买 nike

假设我有一个 ActionController::Parameters像对象
params = ActionController::Parameters.new(a: 1, b: 2, c: 3)
我可以打电话slice就可以了或permit仅获取/允许某些参数。

乍一看,他们返回相同的东西

> params.slice(:a)
=> {"a"=>1}

> params.permit(:a)
[18:21:45.302147] Unpermitted parameters: b, c
=> {"a"=>1}

但是如果我调用 to_h关于它 params.slice(:a).to_h返回一个空的哈希值,而 params.permit(:a).to_h返回一个带有键 :a 的哈希值.据我了解,是这样的,因为 :a不被允许。

我现在想知道的是, slice的用例是什么? ,如果我可以使用 permit ?

最佳答案

我能想到的一个区别是 permit如果您在 slice 时没有明确指定嵌套键,则会削减嵌套哈希允许嵌套哈希:

# params = { a: 'a', nested: { nested_1: 1, nested_2: 2 } }
params.permit(:a, :nested) # => { a: 'a' }
params.slice(:a, :nested) # => { a: 'a', { nested_1: 1, nested_2: 2 } }

另一个区别是在 Rails 4 中, permit不会提高 ActiveModel::ForbiddenAttributes打电话时 .update_attributes(...) (answered here) :
user.update_attributes(params.slice(:email)) # will raise ActiveModel::ForbiddenAttributes
user.update_attributes(params.permit(:email)) # wont raise error

关于ruby-on-rails - 何时在 ActionController::Parameters 中使用切片与许可?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39128592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com