我已经在这行代码上工作了三天。 我有以下强大的参数:
def location_params
params.require(:location).permit(:country, {:ads_attributes => [:remote, :days]})
end
方法 param_clean 将从 location_params 中删除空字段,但它不适用于嵌套的:ads_attributes 。 主要原因是 param_clean 只能在具有类 ActiveController :: Parameters 的 location_params 上调用。我无法使用 v 方法 param_clean
def param_clean
location_params.delete_if{ |k, v| v.empty? or v.instance_of?(ActionController::Parameters) && v.param_clean.empty? }
end
我收到以下错误
undefined method `param_clean' for #<ActionController::Parameters:0x007f..>
这是location_params
的值<ActionController::Parameters {"country"=>"", "ads_attributes"=><ActionController::Parameters {"remote"=>"0", "days"=>""} permitted: true>} permitted: true>
这是触发错误时v
变量的值
<ActionController::Parameters {"remote"=>"0", "days"=>""} permitted: true>
v.class => ActionController::Parameters
该方法不适用于嵌套参数。 非常感谢您的帮助
最诚挚的问候 的Fabrizio
答案 0 :(得分:2)
问题是param_clean
类中没有定义ActionController::Parameters
方法。所以,你必须改变你的方法:
ActionController::Parameters
以包含该方法(不是我建议的方法)。重构方法。一种方法如下:
def param_clean(_params)
_params.delete_if do |k, v|
if v.instance_of?(ActionController::Parameters)
param_clean(v)
end
v.empty?
end
end
# how to use it
param_clean(location_params)