Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在ruby 1.9中将管道分隔字符串数组转换为映射_Ruby On Rails_Ruby_Savon - Fatal编程技术网

Ruby on rails 在ruby 1.9中将管道分隔字符串数组转换为映射

Ruby on rails 在ruby 1.9中将管道分隔字符串数组转换为映射,ruby-on-rails,ruby,savon,Ruby On Rails,Ruby,Savon,我使用savon gem来处理一个非常糟糕的soap响应,比如: ["12|310|T02-260|", "14|130|T01-110|CAR 27", ...] 我需要在管道符号处拆分这些对象,并将它们映射到模型属性。有什么建议吗?让给定的数组成为soap\u response def deal_with_pipe_symbols(soap_response) outer_array = [] soap_response.each do |element| outer_ar

我使用savon gem来处理一个非常糟糕的soap响应,比如:

["12|310|T02-260|", "14|130|T01-110|CAR 27", ...]

我需要在管道符号处拆分这些对象,并将它们映射到模型属性。有什么建议吗?

让给定的数组成为
soap\u response

def deal_with_pipe_symbols(soap_response)
  outer_array = []
  soap_response.each do |element|
    outer_array << element.split('|')
  end
  outer_array
end
def用管道符号处理(soap\u响应)
外部_数组=[]
soap|u response.each do|元素|

外部数组stdlib中的CSV库应该很好地做到这一点(它理解引用等),这里我加入了这些行,但是您可以独立地解析它们,它们将位于更深的数组中

require 'csv'
inputs = ["12|310|T02-260|", "14|130|T01-110|\"CAR|27\""]
result = CSV.parse inputs.join("\n"), col_sep: '|'
result # => [["12", "310", "T02-260", nil], ["14", "130", "T01-110", "CAR|27"]]

这将获得哈希数组

fields = [:a, :b, :c, :d]
response.map{ |r| Hash[*fields.zip(r.split('|')).flatten] }

结果=
[{:a=>1,:b=>2,:c=>3,:d=>4},…]

例如,假设您需要获取并设置id、序列号和skw。 这有帮助吗

class Foo
  attr_accessor :id, :seq, :skw

  def initialize(soap_res)
    %w{id seq skw}.zip(soap_res.split "|").each do |(attr, val)|
      self.send("#{attr}=", val)
    end
  end
end

1.9.3p194 :057 > f = Foo.new "12|310|T02-260"
 => #<Foo:0x007ff1ea8e0970 @id="12", @seq="310", @skw="T02-260">  
class-Foo
属性访问器:id,:seq,:skw
def初始化(soap_res)
%w{id seq skw}.zip(soap_res.split“|”)。每个do |(attr,val)|
self.send(“#{attr}=”,val)
结束
结束
结束
1.9.3p194:057>f=Foo.new“12 | 310 | T02-260”
=> #  

如何将拆分的内容映射到模型中的属性?e、 g.[:a=>“12”,:b=>“310”,:c=>“T02-260”]