在ruby中使用带.map函数的.try函数

时间:2015-01-28 09:10:33

标签: ruby

我需要从json记录中获取一些值并提取如下

curr_json_doc['title']['genre'].map { |s| s['name'] }.join(',')

但是对于某些记录,curr_json_doc ['title'] ['genre']可以是空白的。所以我想对map和join()使用try函数。

我试过以下

curr_json_doc['title']['genre'].try(:map, { |s| s['name'] }).try(:join, (','))

但它没有用。

3 个答案:

答案 0 :(得分:10)

你没有正确传递阻止。块被传递给参数括号外的方法:

curr_json_doc['title']['genre'].try(:map) { |s| s['name'] }.try(:join, ',')

答案 1 :(得分:0)

删除空字符串然后映射。您可以使用delete_if删除空格。

curr_json_doc['title']['genre'].delete_if(&:empty?).map {|s| s['name'] }.join(',');

答案 2 :(得分:0)

如果您不确定是否返回了数组,单个项目或nil,则可以使用Array()

Array(curr_json_doc['title']['genre']).map { |s| s['name'] }.join(',')

请注意:这会轻微改变行为,因为如果nilcurr_json_doc['title']['genre'],它会返回空字符串而不是nil