【问题标题】:Ruby on rails-convert activeRecord to arraysRuby on rails-将 activeRecord 转换为数组
【发布时间】:2015-06-30 00:04:26
【问题描述】:

我目前有一个化合物数据库。对于每种化合物,我都有一系列数据点,每个数据点都包含一个时间 (t0, t2,t4,...,t24) 和一个相应的值。我想提取键(t0、t2、t4、...、t24)和值并将它们放入单独的数组中,以便我可以绘制它们。 我通过以下行获取我的活动记录:

data = Info.where('compoundName = ?',params[:cmpName])

然后我尝试使用以下行提取键和值:

a1 = data.keys
a2 = data.values

但我得到了错误:

ActiveRecord::Relation::ActiveRecord_Relation_Info:0x007fafcdadba18 的未定义方法 `keys'

我查了一下,发现问题是 sql 查询返回的数据类型不支持这些方法。但我不确定如何将活动记录解压缩到所需的数组中。如果我打印出活动记录,它看起来像这样:

[#<Info num: 6, compoundName: "cmp1", t0: 78.77867, t2: 69.57333, t4: 68.95822, t6: 66.21941, t8: 65.37794, t10: 62.696, t12: 60.85907, t14: 60.40803, t16: 58.97237, t18: 59.55294, t20: 57.79256, t22: 57.17229, t24: 56.31774>]

有谁知道如何做到这一点?谢谢!

【问题讨论】:

    标签: ruby-on-rails arrays ruby rails-activerecord


    【解决方案1】:

    如果你只是想将sql对象转换成数组,你可以这样做:

    data = Info.where('compoundName = ?',params[:cmpName]).to_a
    

    它将执行提取。

    【讨论】:

      【解决方案2】:

      你所要做的就是这个,

      data_hash = Info.where('compoundName = ?',params[:cmpName]).first.as_json.select{|v| v=~ /^t[02468]*/}
      
      a1 = data_hash.keys
      a2 = data_hash.values
      

      正如@suslov 所建议的......

      【讨论】:

        【解决方案3】:

        首先,我将您的“信息”类重命名为“复合”,以明确您正在使用的内容:-)

        也就是说,Info.where() 正在返回匹配的所有条记录,因此如果只有一条(或者您只关心一条),请使用 Info.where().first

        如果您想将 tN 属性称为“键”和“值”,请在模型中定义这些方法。

        【讨论】:

        • 我的数据库保证只有一个带有 CompoundName 的元组,所以我认为 Info.where() 将只返回一条匹配的记录
        • 它只会找到一个匹配的记录,但它会在一个数组中返回它。这是单个对象:{}这是数组中的单个对象:[{}]。正如 Hassan 所说,使用 .first 来获取前者。
        【解决方案4】:

        因此,查询当前返回与 CompoundName 匹配的所有记录。如果你只想要一个,你应该查询:data = Info.where('compoundName = ?',params[:cmpName]).first

        我假设 keysvalues 是 Info 模型上的方法?可能是 models/info.rb 之类的:

        class Info < ActiveRecord::Base
          def keys
            (0..24).map { |n| "t#{n}" }
          end
        
          def values
            keys.map { |key| self[key] }
          end
        end
        

        并确保您在单个信息记录上调用这些方法。

        您应该考虑将数据以数组形式存储在数据库中。

        【讨论】:

        • 对不起,我是 ruby​​ on rails 的新手,我可以在 info.rb 中定义这些方法吗?我试过这样做,但是当我尝试使用这些方法时,它仍然说键和值是未定义的方法。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-20
        • 2011-01-21
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2021-04-02
        • 1970-01-01
        相关资源
        最近更新 更多