2013-03-11 28 views
0

我有以下形式的列表:分割清單兩次在Ruby中

​​

我想利用這個列表,並創建三個富對象(每個名稱和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 

這工作正常,但它有點冗長。有沒有更簡單的方法呢?

+1

'.each.map'被浪費了代碼。相反,只需使用'map'。 – 2013-03-11 16:30:26

回答

1

不是一個真正的好選擇,而是一種更可讀的方式

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

這是好10倍! – stephenmurdoch 2013-03-11 08:21:26

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('-')