我正在尝试实施以下讨论中的方法,以便从我的强参数中删除所有空白字段。
class Hash
def delete_blank
delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?}
end
end
p hash.delete_blank
# => {"y"=>"content"}
How to recursively remove all keys with empty values from (YAML) hash?
这是location_params,我想从中删除空字段:
def location_params
params.require(:location).permit(:country, {:ads_attributes => [:remote]})
end
当我在 location_params
上调用以下 delete_blank 方法时会触发以下错误undefined method "delete_blank" for #<ActionController::Parameters:0x007.....>
我的意见是我必须修改我的 Rails项目中的哈希类,但我不知道怎么做,我想它可能不是最佳方案。
非常感谢你的帮助 的Fabrizio
答案 0 :(得分:4)
Rails params
方法返回的结构看起来像一个哈希,但实际上它是ActionController::Parameters
的一个实例。
由于delete_blank
未定义ActionController::Parameters
,Hash
未定义undefined method "delete_blank" for #<ActionController::Parameters...
,因此出现此错误:ActionController::Parameters
您有两种选择:
A)在class ActionController::Parameters
def delete_blank
delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?}
end
end
上定义方法:
ActionController::Parameters
或者B)将Hash
的实例翻译成ActionController::Parameters.new(params.to_h.delete_blank).permit!
,调用该方法并将其翻译回来:
new sap.ui.layout.form.FormElement(this.createId('valor'),{
label: 'Valor',
fields: [
new sap.m.Input({
value:{
parts: [{
path: '/valor'
},
{
path: 'BRL'
}
],
type: 'sap.ui.model.type.Currency',
formatOptions: {
showMeasure: false
}
},
id: this.createId('txtValor')
}),
]
}),