簡體   English   中英

如何使用 ruby​​ 中的點運算符訪問 Sequel 結果?

[英]How to access Sequel result with dot operator in ruby?

我是 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 查詢結果。

謝謝:)

persons.each do |p|
  puts p.name . # this line cause error 
end

你在這里得到什么確切的錯誤? 我猜是未定義的方法錯誤? 似乎您可能熟悉 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]訪問該數據的原因。 您正在調用角色數組的第 0 項並訪問其“名稱”哈希鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM