Rails 根或嵌套对象中的强参数
Rails Strong Parameters either in root or nested object
我希望能够在根参数对象中支持一组参数:
?foo=a
params.permit(:foo)
或在嵌套对象中:
?bar[foo]=a
params.require(:bar).permit(:foo)
我正在将参数从表单对象传递到该控制器,因此嵌套对象自然发生,但我还希望能够在查询字符串中传递根对象中的参数并支持两者。
有没有一种优雅的、非 hacky 的方法来完成这个?
请记住,require 与 permit 不同。
require
方法确保特定参数存在。没有必要在嵌套的上使用,它确保所需的参数出现在参数中,否则会抛出错误。
您可以像这样使用嵌套属性
params = ActionController::Parameters.new({
person: {
name: "Francesco",
age: 22,
pets: [{
name: "Purplish",
category: "dogs"
}]
}
})
permitted = params.permit(person: [ :name, { pets: :name } ])
permitted.permitted? # => true
permitted[:person][:name] # => "Francesco"
permitted[:person][:age] # => nil
permitted[:person][:pets][0][:name] # => "Purplish"
permitted[:person][:pets][0][:category] # => nil
你可以查看关于这个的文档here
require
类似于 []
,但在缺少值时会出现异常(很像 Hash#fetch
)。您可以直接使用 []
来获取嵌套结构(如果存在),然后回退到根 params
否则:
(params[:bar] || params).permit(:foo)
我希望能够在根参数对象中支持一组参数:
?foo=a
params.permit(:foo)
或在嵌套对象中:
?bar[foo]=a
params.require(:bar).permit(:foo)
我正在将参数从表单对象传递到该控制器,因此嵌套对象自然发生,但我还希望能够在查询字符串中传递根对象中的参数并支持两者。
有没有一种优雅的、非 hacky 的方法来完成这个?
请记住,require 与 permit 不同。
require
方法确保特定参数存在。没有必要在嵌套的上使用,它确保所需的参数出现在参数中,否则会抛出错误。
您可以像这样使用嵌套属性
params = ActionController::Parameters.new({
person: {
name: "Francesco",
age: 22,
pets: [{
name: "Purplish",
category: "dogs"
}]
}
})
permitted = params.permit(person: [ :name, { pets: :name } ])
permitted.permitted? # => true
permitted[:person][:name] # => "Francesco"
permitted[:person][:age] # => nil
permitted[:person][:pets][0][:name] # => "Purplish"
permitted[:person][:pets][0][:category] # => nil
你可以查看关于这个的文档here
require
类似于 []
,但在缺少值时会出现异常(很像 Hash#fetch
)。您可以直接使用 []
来获取嵌套结构(如果存在),然后回退到根 params
否则:
(params[:bar] || params).permit(:foo)