在Ruby中拆分列表两次

时间:2013-03-11 08:14:42

标签: ruby-on-rails ruby

我有以下表格的清单:

"first - http://url.com, second - http://url.net, third - http://url.so"

# i.e. name - url, name - url, name - url
# so I have three name - url pairs

我想获取这个列表并创建三个Foo对象(每个对象都有name和url属性),所以我想出了这个:

def foo_list=(list)
  self.foos = list.split(",").map { |pair| pair.split(" - ") }.each.map { |attr| Foo.where(name: attr[0].strip, url: attr[1].strip).first_or_create }
end

这很好用,但有点冗长。有没有更简单的方法呢?

2 个答案:

答案 0 :(得分:1)

不是更好的选择,而是更易读的方式

self.foos = list.split(',').map do |pair|
  name, url = pair.split(' - ')
  Foo.where(name: name.strip, url: url.strip).first_or_create
end

答案 1 :(得分:0)

我可能会把它写成:

self.foos = list.split(",").map { |pair|
  pair.split("-").map(&:strip)
}.map { |name, url|
  Foo.where(name: name, url: url).first_or_create
}

strip

的一部分,您无需split('-')两次