0

次の形式のリストがあります。

"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

このリストを取得して、3つのFooオブジェクト(それぞれに名前と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

これは正常に機能しますが、少し冗長です。それを行うためのより簡単な方法はありますか?

4

2 に答える 2

1

本当に良いオプションではありませんが、より読みやすい方法です

self.foos = list.split(',').map do |pair|
  name, url = pair.split(' - ')
  Foo.where(name: name.strip, url: url.strip).first_or_create
end
于 2013-03-11T08:19:16.110 に答える
0

私はおそらくそれを次のように書くでしょう:

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

stripあなたがその一部としてそれを行うことができるとき、2回する必要はありませんsplit('-')

于 2013-03-11T16:33:50.497 に答える