Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ruby中使用点运算符访问Sequel结果?_Ruby_Padrino_Dot Operator - Fatal编程技术网

如何在ruby中使用点运算符访问Sequel结果?

如何在ruby中使用点运算符访问Sequel结果?,ruby,padrino,dot-operator,Ruby,Padrino,Dot Operator,我是续集和ruby的新手,我有一件事需要你的帮助。 总之,我不能用点运算符访问数据库查询结果。 我在padrino ruby项目中使用sequel适配器。 比如说, 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

我是续集和ruby的新手,我有一件事需要你的帮助。 总之,我不能用点运算符访问数据库查询结果。 我在padrino ruby项目中使用sequel适配器。 比如说,

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>
在本例中,我可以使用person[0][:name]访问用户名,但无法使用dot operator访问

所以我想知道如何使用点运算符访问Sequel查询结果

谢谢:)

你到底犯了什么错误?我猜是一个未定义的方法错误?似乎您可能熟悉ActiveRecord语法。我自己并没有用过sequel,但它和AR有点不同。根据他们的文档,你们会这样做

persons.map(:name) # => ['Harry', 'Steve', 'Israel', ...]
all方法返回一个散列数组,其中每个散列对应一条记录

对于上面的示例,我将尝试以下方法:

persons.each do |p|
  puts p[:name] . # here we are now accessing the name hash key instead of trying to access the name method.
end

您希望访问正在迭代的每个哈希的名称键。因为您正在迭代哈希数组。这就是为什么您可以使用
person[0][:name]
访问该数据。您正在调用persona数组的第0项并访问其“name”散列键。

我认为两个人都是
Person::ActiveRecord\u Relation
类型。这个点本身是做什么的?我不知道那是合法的。点运算符通常表示对上一个对象调用以下方法。@KeithBennett请参阅下面的答案。您正在迭代哈希数组。您需要访问散列键“name”。通过使用点,您正在使用名称方法。这适用于activerecord ORM,但不适用于sequel。它们有不同的语法,@nolyoi您将使用点作为
person.name
,而不是
person.name来调用name方法。
,否?我问的是
,后面什么都没有。@KeithBennett哦,我甚至没有注意到。老实说,我以前从未见过这样的人。
persons.map(:name) # => ['Harry', 'Steve', 'Israel', ...]
persons.each do |p|
  puts p[:name] . # here we are now accessing the name hash key instead of trying to access the name method.
end