Ruby MongoMapper嵌入式文档

Ruby MongoMapper嵌入式文档,ruby,mongomapper,Ruby,Mongomapper,我在category类中将产品作为嵌入式文档,如下所示: require 'mongo_mapper' class Category include MongoMapper::Document key :Name, String key :NumberOfProducts, Integer many :products end 以下是产品类别: require 'mongo_mapper' class Product include MongoMapper::EmbeddedDoc

我在category类中将产品作为嵌入式文档,如下所示:

require 'mongo_mapper'

class Category

include MongoMapper::Document

key :Name, String
key :NumberOfProducts, Integer
many :products

end
以下是产品类别:

require 'mongo_mapper'

class Product

include MongoMapper::EmbeddedDocument

  key :Name, String

end
我使用下面的代码来显示产品,但它说找不到方法“Name”

以下是错误:

 undefined method `Name' for {"Name"=>"Amiga"}:BSON::OrderedHash (NoMethodError)

首先要尝试的是:

many :products
…但您尝试使用
category.Products.each

一定要保持命名的一致性,我建议使用ruby约定(带下划线,不使用驼峰大小写,对于非类当然不使用大写驼峰大小写)

所以,也许:

class Category
  include MongoMapper::Document
  key :name, String
  many :products
end

class Product
  include MongoMapper::EmbeddedDocument
  key :name, String
end


categories = Category.all
categories.each do |category|
  puts category.name
  category.products.each do |product|
    puts "  " + product.name
  end
end

你要取回的对象就像一个散列。要访问名称,您需要使用
产品[“名称”]
类别[“名称”]

e、 g

在控制器中

@categories = Category.all
看法




MongoMapper的EmbeddedDocument在您使用
many
时,用散列中的数据实例化适当命名的类。如果您只需要散列,您可以使用类似于
key:products,Array,:default=>[]
的内容,然后使用
category.products'asdf'}
谢谢,但我改为products,而不是products,因为MongoDb数据库将其序列化为products。再次感谢!?mongodb序列化它的内容是不相关的,您使用的是Ruby插件,需要遵循它的约定(很可能遵循Ruby约定)。实际上,序列化是从.NET(C#)端执行的!。网边!?这几乎肯定是你的问题:)在这种情况下,我只需要使用裸机ruby驱动程序编写一个小脚本来清理数据。基本上,.NET代码写入MongoDb数据库,ruby代码读取数据。只是为了好玩!:D
irb(main):007:0> oh.baz
NoMethodError: undefined method `baz' for {"foobar"=>"baz"}:BSON::OrderedHash
    from (irb):7
irb(main):008:0> oh[:foobar]
=> "baz"
@categories = Category.all
<% @categories.products.each do |product| %>
  <%= product.Name %> <br/>
<% end %>