Ruby MongoMapper嵌入式文档
我在category类中将产品作为嵌入式文档,如下所示: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
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 %>