gpt4 book ai didi

ruby-on-rails - Rails - 强大的参数从嵌套属性中删除空字段

转载 作者:数据小太阳 更新时间:2023-10-29 08:58:30 26 4
gpt4 key购买 nike

我已经在这行代码上工作了三天。我有以下强大的参数:

def location_params
params.require(:location).permit(:country, {:ads_attributes => [:remote, :days]})
end

param_clean 方法将从 location_params 中删除空字段,但它不适用于嵌套的 :ads_attributes。主要原因是 param_clean 只能在具有类 ActiveController::Parameterslocation_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

该方法不适用于嵌套参数。非常感谢您的帮助

最好的问候法布里齐奥

最佳答案

问题是 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)

关于ruby-on-rails - Rails - 强大的参数从嵌套属性中删除空字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42739001/

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