加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在Sequel中检索嵌套记录

发布时间:2020-12-17 03:22:23 所属栏目:百科 来源:网络整理
导读:我正在尝试从以下两个表中检索嵌套形式的数据(在SQLite中) DB = Sequel.sqlite('database.sqlite')DB.create_table? :artists do primary_key :id String :nameendDB.create_table? :albums do primary_key :id String :title foreign_key :artist_id,:artis
我正在尝试从以下两个表中检索嵌套形式的数据(在SQLite中)

DB = Sequel.sqlite('database.sqlite')

DB.create_table? :artists do
    primary_key     :id
    String          :name
end

DB.create_table? :albums do
    primary_key     :id
    String          :title
    foreign_key     :artist_id,:artists,:key => :id
end

artists = DB[:artists]
albums = DB[:albums]

id1 = artists.insert(:name => 'Mike')
id2 = artists.insert(:name => 'John')

albums.insert(:title => 'Only You',:artist_id => id1 )
albums.insert(:title => 'Only Us',:artist_id => id1 )
albums.insert(:title => 'Only Me',:artist_id => id2 )

我想要的输出 –

[
  {
    :id => 1,:name => 'Mike'
    :albums => [
      {
        :id => 1,:title => 'Only You'
      },{
        :id => 2,:title => 'Only Us'
      }
    ]
  },{
    :id => 2,:name => 'John'
    :albums => [
      {
        :id => 3,:title => 'Only Me'
      }
    ]
  }
]

我试过’急切’加载 –

class Artist < Sequel::Model(:artists)
  one_to_many  :db[:albums],:key => :artist_id
end

class Album < Sequel::Model(:albums)
  many_to_one  :artist,:key => :artist_id
end


Artist.eager(:albums).all{ |a| p a }

但那没用.

谁能指出我正确的方向?

解决方法

Artist.eager(:albums).all会热切地加载相册,但是{| a | p a}不会显示专辑(因为Sequel :: Model#inspect只显示当前模型的值,而不显示任何关联的对象).使用{| a | p [a,a.albums]}看到相册已经加载.

如果要生成您描述的哈希:

Artist.eager(:albums).all.map do |a|
  a.values.merge(:albums=>a.albums.map{|al| al.values})
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读