使用.map简化表达式

时间:2014-10-01 23:19:55

标签: ruby-on-rails activerecord

下面我有一个使用一堆each迭代器

的示例活动记录查询
user.user_spells.each do |us|
  us.spell.buff_effects.where(stat_effected:'gold').each do |be|
    value = value + be.value
  end
end

我想使用.map返回所有结果的列表,所以我可以在一行中完成。

我想出了:

user.user_spells.map { |us| us.spell.buff_effects.where(stat_effected:stat_effected) }.each do |be|
  value = value + be.value
end

然而...... .map块返回一些空数组。不确定如何正确写它。

任何帮助将不胜感激!感谢

1 个答案:

答案 0 :(得分:1)

可能沿着这些方向,如果你想要的是最终值的总和:

value =
  user.user_spells.flat_map do |us|
    us.spell.buff_effects.where(stat_effected:'gold').map(&:value)
  end.reduce(&:+)