【发布时间】:2018-06-10 08:09:38
【问题描述】:
我是 Sequel 和 ruby 的新手,我有一件事需要你的帮助。 总之,我无法使用点运算符访问数据库查询结果。 我在 padrino ruby 项目中使用续集适配器。 例如,
persons = Person.all
persons.each do |p|
puts p.name . # this output correct person name, as 'john'
end
但是如果我做一些查询
persons = Person.where(:age=>20)
persons.each do |p|
puts p.name . # this line cause error
end
我比较了它们的数据类型,彼此不同。
puts persons # in first case - array
#<Gig:0x007fbdb6d64ef0>
#<Gig:0x007fbdb6d64838>
#<Gig:0x007fbdb6d641f8>
puts persons # in second case - object
#<Sequel::Postgres::Dataset:0x007fbdbc614898>
所以我尝试在第二种情况下将结果更改为哈希数组以使用点运算符访问字段
persons_hash= persons.collect do |p|
ro.to_hash
end
在这种情况下,我可以使用 person[0][:name] 访问用户名,但无法使用点运算符访问。
所以我想知道如何使用点运算符访问 Sequel 查询结果。
谢谢:)
【问题讨论】:
-
我认为这两个人都是
Person::ActiveRecord_Relation类型。 -
这个点本身有什么作用?我不知道那是合法的 Ruby。点运算符通常表示在前一个对象上调用以下方法。
-
@KeithBennett 请参阅下面我的回答。您正在迭代一个哈希数组。您需要访问哈希键“名称”。您通过使用点来使用名称方法。这适用于 activerecord ORM,但不适用于续集。它们有不同的语法,
-
@nolyoi 您会使用点号来调用名称方法,例如
person.name,而不是person.name .,不是吗?我问的是.,后面什么都没有。 -
@KeithBennett 哦,我什至没有注意到这一点。老实说,我以前从未见过这种方式。
标签: ruby padrino dot-operator