在Mongo数据库中插入一个Ruby对象数组



所以,我使用Ruby MongoDB驱动程序,我想插入和对象这样:

 db.insert_one({
  'game_id' => @token,
  'board' => {
    'tiles' => @board.tiles
  }
})

其中@board是Board类的实例。

class Board
 attr_accessor :tiles
  def initialize()
    @tiles = [Tile.new, Tile.new]
  end
end

和瓷砖

class Tile
  def initialize()
    @x = 1, @y = 1
  end
  def to_json(options)
    {"x" => @x, "y" => @y}.to_json
  end
end

所以在最后,'tiles'字段应该是这样的:

'tiles': [{x:1, y:1}, {x:1, y:1}]

我得到这个错误:

undefined method `bson_type' for #<Tile:0x007ff7148d2440>

我正在使用的gem: 'sinatra', 'mongo(2.0.4)'和'bson_ext'(都需要使用Bundler.require)。谢谢!

您可以简单地转换@board。从Objects集合到ruby Hashes集合的tile:

class Tile
  def initialize()
    @x = 1, @y = 1
  end
  def raw_data
    {"x" => @x, "y" => @y}
  end
end
db.insert_one({
  'game_id' => @token,
  'board' => {
    'tiles' => @board.tiles.map(&:raw_data)
  }
})

对于更复杂的东西,我建议您使用mongoid http://mongoid.org/en/mongoid/

相关内容

  • 没有找到相关文章

最新更新