Ruby如何修改参数
Ruby how to modify parameters
所以我有这段代码,我的目标是将任何空字符串转换为 null
def convert_empty_strings_to_null
if request.patch? || request.post?
convert_empty_strings_to_null_rec(request.params)
end
end
def convert_empty_strings_to_null_rec(param)
param = nil if param.empty? if param.is_a?(String)
param.all?{|v| convert_empty_strings_to_null_rec v} if param.is_a?(Array)
param.all?{|k,v| convert_empty_strings_to_null_rec v} if param.is_a?(Hash)
end
但我是 rails 上 ruby 的新手,我发现它按值而不是按引用发送参数,所以参数没有变化,我该如何解决这个问题?
首先,为了保持更改的持久性,您的 convert_empty_strings_to_null_rec
方法应该是这样的:
def convert_empty_strings_to_null_rec(param)
if param == ""
updated_param == nil
elsif param.is_a?(Array)
updated_param == param.map{|x| nil if x.empty? }
elsif param.is_a?(Hash)
updated_param = {}
param.each do |k, v|
if v.empty?
updated_param[k] = nil
else
updated_param[k] = v
end
end
end
return updated_param
end
此外,根据您的问题,我假设 convert_empty_strings_to_null
是一种操作方法。应该对其进行更新以捕获 convert_empty_strings_to_null_rec
方法返回的内容。
def convert_empty_strings_to_null
if request.patch? || request.post?
updated_params = convert_empty_strings_to_null_rec(request.params)
end
# you can use the updated_params here on in this action method
end
希望对您有所帮助:)
我假设 "empty" 你的意思是零与字符串,这意味着只包含空格的字符串应该保持原样。 (否则 blank?
和 strip
会成为你的朋友。)
def convert_empty_strings_to_nil
if request.patch? || request.post?
request.params.each do |key, value|
request.params[key] = convert_empty_strings_to_nil_rec(value)
end
end
end
def convert_empty_strings_to_nil_rec(param)
case param
when String
param.empty? ? nil : param
when Array
param.map{ |v| convert_empty_strings_to_nil_rec(v) }
when Hash
param.map{ |k,v| [k, convert_empty_strings_to_nil_rec(v)] }.to_h
else
param
end
end
所以我有这段代码,我的目标是将任何空字符串转换为 null
def convert_empty_strings_to_null
if request.patch? || request.post?
convert_empty_strings_to_null_rec(request.params)
end
end
def convert_empty_strings_to_null_rec(param)
param = nil if param.empty? if param.is_a?(String)
param.all?{|v| convert_empty_strings_to_null_rec v} if param.is_a?(Array)
param.all?{|k,v| convert_empty_strings_to_null_rec v} if param.is_a?(Hash)
end
但我是 rails 上 ruby 的新手,我发现它按值而不是按引用发送参数,所以参数没有变化,我该如何解决这个问题?
首先,为了保持更改的持久性,您的 convert_empty_strings_to_null_rec
方法应该是这样的:
def convert_empty_strings_to_null_rec(param)
if param == ""
updated_param == nil
elsif param.is_a?(Array)
updated_param == param.map{|x| nil if x.empty? }
elsif param.is_a?(Hash)
updated_param = {}
param.each do |k, v|
if v.empty?
updated_param[k] = nil
else
updated_param[k] = v
end
end
end
return updated_param
end
此外,根据您的问题,我假设 convert_empty_strings_to_null
是一种操作方法。应该对其进行更新以捕获 convert_empty_strings_to_null_rec
方法返回的内容。
def convert_empty_strings_to_null
if request.patch? || request.post?
updated_params = convert_empty_strings_to_null_rec(request.params)
end
# you can use the updated_params here on in this action method
end
希望对您有所帮助:)
我假设 "empty" 你的意思是零与字符串,这意味着只包含空格的字符串应该保持原样。 (否则 blank?
和 strip
会成为你的朋友。)
def convert_empty_strings_to_nil
if request.patch? || request.post?
request.params.each do |key, value|
request.params[key] = convert_empty_strings_to_nil_rec(value)
end
end
end
def convert_empty_strings_to_nil_rec(param)
case param
when String
param.empty? ? nil : param
when Array
param.map{ |v| convert_empty_strings_to_nil_rec(v) }
when Hash
param.map{ |k,v| [k, convert_empty_strings_to_nil_rec(v)] }.to_h
else
param
end
end