我正在尝试实现下面的讨论中找到的方法,以从我的强参数中删除所有空白字段。
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项目中的哈希类,但我不知道该怎么做,我认为它可能不是最佳解决方案。
非常感谢您的帮助 法布里齐奥
最佳答案
Rails 返回的结构 params
方法看起来像一个Hash,但实际上它是 ActionController::Parameters
的一个实例。
自 delete_blank
未在 ActionController::Parameters
上定义,但是在Hash
上您收到此错误:undefined method "delete_blank" for #<ActionController::Parameters...
您有两个选择:
A) 在 ActionController::Parameters
上定义方法:
class ActionController::Parameters
def delete_blank
delete_if{|k, v| v.empty? or v.instance_of?(Hash) && v.delete_blank.empty?}
end
end
或者 B) 翻译 ActionController::Parameters
的实例进入Hash
,调用该方法并将其翻译回来:
ActionController::Parameters.new(params.to_h.delete_blank).permit!
关于ruby-on-rails - Rails - 调用操作 Controller 参数的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42726181/