ruby:通过map向模型添加其他参数

时间:2016-02-23 22:19:35

标签: ruby

我有一个来自数据库db_groups = DbGroups.all

的模型

以及来自某些“元数据”的自定义groups数组。属性group.idgroup.env

首先,我想只有db_groups,其中db_group.id = group.id。我这样做:

       @metadata['groups'].map do |group|
         db_groups.map { |db| db.id == group.id ? db : nil}
       end.flatten.compact

这很好,到目前为止一直很好:)

现在我想将env参数临时添加到我的db_groups模型中。 所以要做一些额外的事情,比如db_groups[:env] = group.env

我试图用“地图”做到这一点,但它不起作用,所以像这样:

   @metadata['groups'].map do |group|
     db_groups.map { |db| db.id == group.id ? db[:env] = group.env : nil}
   end.flatten.compact

什么是解决此任务的正确方法?

1 个答案:

答案 0 :(得分:1)

假设您使用的是rails,您可以使用as_json将模型转换为哈希值。 E.g。

db_groups_h = db_groups.map(&:as_json)

然后添加您的属性:

db_groups_h.each{ |db| db[:env] = group.env if db.id == group.id }

有关详细信息,请参阅this answer