Ruby从键值对获取值会在一个字符串中提供键和值

时间:2014-05-06 16:59:09

标签: ruby sequel

我的哈希看起来像:

{:system=>"rr1k1"}

如果我这样做:

puts @var[:system]

看起来像:

systemrr1k1

如何在不执行@ var.each的情况下获取rr1k1?

编辑:

回应以下评论。我的实际变量是从带有续集的db查询设置的,只有一个结果。当我对变量执行put时,它看起来像:

puts @var
#<Sequel::MySQL::Dataset: "select distinct lower(system) as system from client where db = 'CLIENTDB1'">

如果我对它进行循环,我会得到:

@var.each do |x|
    p x
end

给我:

{:system=>"rr1k1"}

但是@var [:system]给了我

systemrr1k1

2 个答案:

答案 0 :(得分:2)

Sequel::MySQL::Dataset中有@var,您可以从puts @var输出中看到Sequel::MySQL::Dataset[]Sequel::Datesetthat method获取[方法:

  

- (对象)DB[:table][:id=>1] # SELECT * FROM table WHERE (id = 1) LIMIT 1 # => {:id=1} ](*条件)

     

返回与条件匹配的第一条记录。例子:

@var[:system]

这意味着puts @var.first[:system] 将为您提供,而不是单个值。

也许你真的想要:

:system

剥离结果集中的第一行(也是唯一一行),然后将{{1}}值拉出该行。

答案 1 :(得分:0)

您的@varSequel DatasetEnumerable。要访问您的数据,您必须引用该行或使用.first,如下所示:

puts @var[0][:system] # "rr1k1"

puts @var.first[:system]  # "rr1k1"

由于它是数据集,因此可能还有其他行,因此如果要正确循环每个结果,则必须使用.each