【问题标题】:Ruby on Rails String to OpenStructRuby on Rails 字符串到 OpenStruct
【发布时间】:2014-03-31 15:16:05
【问题描述】:

我有以下 OpenStruct 对象,但如果我调用 .class 它是一个字符串。如何将其转回 OpenStruct 对象?

[
 #<OpenStruct source="hkepc.com", visits="8", visitBounceRate="37.5", avgTimeOnSite="199.375", pageviews="25", pageviewsPerVisit="3.125">, 
 #<OpenStruct source="1st-tag.co.uk", visits="6", visitBounceRate="100.0", avgTimeOnSite="0.0", pageviews="6", pageviewsPerVisit="1.0">, 
 #<OpenStruct source="facebook.com", visits="5", visitBounceRate="80.0", avgTimeOnSite="8.2", pageviews="6", pageviewsPerVisit="1.2">
]

【问题讨论】:

  • 这不是一个 OpenStruct 对象,它是一个数组
  • 您能否发布一个工作示例来重现该问题?
  • 所以我可以拆分吗?
  • @MaxRose-Collins Object#class 方法总是返回 String (ruby-doc.org/core-2.1.1/Object.html#method-i-class) - 我误解了你在问什么吗?此外,您在此处发布了 Array,而不是单个 OpenStruct,因此我假设您指的是该数组的一个元素。
  • @AndreasKavountzis:不,它返回一个class

标签: ruby-on-rails ruby openstruct


【解决方案1】:

有点hacky,但我认为可以实现您的目标:

require 'ostruct'

string_array = '[
 #<OpenStruct source="hkepc.com", visits="8", visitBounceRate="37.5", avgTimeOnSite="199.375", pageviews="25", pageviewsPerVisit="3.125">, 
 #<OpenStruct source="1st-tag.co.uk", visits="6", visitBounceRate="100.0", avgTimeOnSite="0.0", pageviews="6", pageviewsPerVisit="1.0">, 
 #<OpenStruct source="facebook.com", visits="5", visitBounceRate="80.0", avgTimeOnSite="8.2", pageviews="6", pageviewsPerVisit="1.2">
]'

string_array.gsub(/(\n|#<OpenStruct|\[|\]|\s+)/, '').split('>,').map do |attrs|
  struct_attrs = attrs.split(',')
  attrs = struct_attrs.inject({}) do |hash, elem|
    hash[elem.split('=').first] = elem.split('=').last.gsub('"', '')
    hash
  end

  OpenStruct.new(attrs)
end

【讨论】:

  • 但目前数组实际上是一个字符串,如果你明白我的意思吗?
  • 啊,抱歉,OP 不清楚。所以这意味着这些最有可能是这些对象的.to_s 版本......我不确定是否有一种方法可以让您将它们重建为OpenStructs 而不必解析出属性(如在您在上面的评论)。
  • @MaxRose-Collins 更新了我的回复,如果有帮助请告诉我!
  • 这非常接近!但它似乎添加了额外的引号和斜杠? #
  • @MaxRose-Collins 答案已更新。希望这有效!
猜你喜欢
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2011-03-01
  • 2014-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
相关资源
最近更新 更多