如何正确反序列化 boolean params.permit 值以确保它在 Rails 中是布尔值

问题描述 投票:0回答:1

有允许的参数:

{
   "string_value": "value",
   "boolean_value": "true/false",
   "other_value": "blabla"
}

我需要像这样将

boolean_value
转换为布尔值
ActiveRecord::Type::Boolean.new.deserialize
但是当我允许参数时:

ActiveRecord::Type::Boolean.new.deserialize(params.permit(:boolean_value)[:boolean_value])

它无法正常工作,因为结果总是

true
。 如何正确传递并允许此参数?

ruby-on-rails ruby parameters query-string strong-parameters
1个回答
0
投票

我有点困惑你是说

params[:boolean_value]
的值是
"true/false"
还是
"true"
还是
"false"
? 如文档中所述,以下值将被强制为
false
[ false, 0, "0", :"0", "f", :f, "F", :F, "false", :false, "FALSE", :FALSE, "off", :off, "OFF", :OFF]
""
将是
nil
,其他所有值都将是
true

实现相当简单来源

所以

"true/false"
将是
true

示例:

["true/false","true","false",""].map do |value| 
 {value => ActiveModel::Type::Boolean.new.deserialize(value)
end  
#=> [ {"true/false" => true},{"true" => true}, {"false" => false}, {"" => nil}] 
© www.soinside.com 2019 - 2024. All rights reserved.