Ruby: How to turn a hash into HTTP parameters?

后端 未结 14 1600
故里飘歌
故里飘歌 2020-12-07 06:46

That is pretty easy with a plain hash like

{:a => \"a\", :b => \"b\"} 

which would translate into

\"a=a&b=b\"
<         


        
14条回答
  •  暖寄归人
    2020-12-07 07:47

    class Hash
      def to_params
        params = ''
        stack = []
    
        each do |k, v|
          if v.is_a?(Hash)
            stack << [k,v]
          elsif v.is_a?(Array)
            stack << [k,Hash.from_array(v)]
          else
            params << "#{k}=#{v}&"
          end
        end
    
        stack.each do |parent, hash|
          hash.each do |k, v|
            if v.is_a?(Hash)
              stack << ["#{parent}[#{k}]", v]
            else
              params << "#{parent}[#{k}]=#{v}&"
            end
          end
        end
    
        params.chop! 
        params
      end
    
      def self.from_array(array = [])
        h = Hash.new
        array.size.times do |t|
          h[t] = array[t]
        end
        h
      end
    
    end
    

提交回复
热议问题