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