【问题标题】:Return an array of uniq keys from a query of hstore data in rails从 rails 中的 hstore 数据查询返回 uniq 键数组
【发布时间】:2013-07-16 20:04:36
【问题描述】:

我想使用 hstore 键作为表列标题。我的方法是简单地映射一个 rails 查询,该查询将返回来自多条记录的所有键,然后将 uniq 的键打印到数组中。

我将在 Prawn 中构建表格,同时使用静态和动态列标题...像这样..但是,这当然行不通。

 [["DATE", "LOCATION", "DAY OFF", "START", "END" + @users_options.select("properties").map { |k,v| ",#{k}" }]]

如何遍历用户日志并仅输出 uniq 键?

我刚试过这个......似乎很接近......但还没有工作

 a = []
 user.useroptions.select(:properties).collect{ |k,v| a << k }

【问题讨论】:

  • 从一条记录中获取密钥很容易@users_options.keys....但是,从多条记录中获取密钥并不容易。
  • 我可以做的一件事……是简单地循环遍历记录并将所有 hstore 哈希合并到一个哈希中……不知道如何在不破坏的情况下做到这一点。然后,从一个哈希中获取 uniq 键。

标签: ruby-on-rails-3 postgresql-9.1 hstore


【解决方案1】:

我创建了一个辅助方法:

def keys(user)
  keys = []
  user.useroptions.select(:properties).each do |opt| 
    a = opt.properties.keys
    keys << a
  end

  keys.flatten.uniq
end

这会遍历所有 hstore 记录,获取键,然后展平散列,并仅放入 uniq 值

【讨论】:

  • 现在,我遇到的问题是键的返回值是一个数组。我需要以某种方式将此数组与静态数组中已经存在的静态值一起嵌入...而不破坏数组..
【解决方案2】:

为了完成这项工作,我将静态数组项移到了帮助程序中并使用了“unshift”方法……这样我就将一个数组输出到了 Prawn 表构建器。

def keys(user)
  keys = []
  user.useroptions.select(:properties).each do |opt| 
    a = opt.properties.keys
    keys << a
 end

 keys.flatten.uniq

结束

keys.flatten.uniq.unshift("DATE", "LOCATION", "DAY OFF", "START", "END")

然后我把我的助手滑到虾桌

    [keys(@users_logs)] +

    ....table rows

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多