【问题标题】:ruby: add additional parameter to model by mapruby:按地图向模型添加附加参数
【发布时间】:2016-02-23 22:19:34
【问题描述】:

我有一个来自数据库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

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

【问题讨论】:

    标签: ruby


    【解决方案1】:

    假设您使用的是 Rails,您可以使用 as_json 将模型转换为哈希。例如

    db_groups_h = db_groups.map(&:as_json)
    

    然后添加你的属性:

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

    详情请见this answer

    【讨论】:

    • 我收到了这个:undefined method []=' for nil:NilClass
    • db_groups 是否包含 nils?
    • 奇怪,错误提示我们正在尝试访问 nil。 db_groups_h = db_groups.compact.map(&:as_json) 有效吗?
    • 问题是我首先想通过 id 将 db_groups 映射到 groups,在你的建议中我只是向 db_groups 添加一个元素,但不要缩小它
    • 啊,那是另外一个问题,直接拒绝不匹配的db_groups_h.reject!{ |d| d[:env].nil? }
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多