代码之家  ›  专栏  ›  技术社区  ›  azamsharp

MongoMapper嵌入文档

  •  0
  • azamsharp  · 技术社区  · 15 年前

    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”。

    require 'rubygems'
    require 'mongo'
    require 'mongo_mapper'
    require 'category'
    require 'product'
    
    include Mongo
    
    MongoMapper.database = 'Northwind'
    
    categories = Category.all()
    
    categories.each{|category| puts category.Name
    
      unless category.Products.nil?
    
         category.Products.each{|product| puts product.Name}
    
      end
    
    
    }
    

    错误如下:

     undefined method `Name' for {"Name"=>"Amiga"}:BSON::OrderedHash (NoMethodError)
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   rfunduk    15 年前

    首先要尝试的是:

    many :products
    

    …但是你试着用 category.Products.each

    一定要保持命名的一致性,我建议使用ruby约定(下划线,而不是camel-case,对于非类当然也不要大写camel-case)。

    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
    
        2
  •  0
  •   Blaine Lafreniere    15 年前

    你要拿回的东西就像一个杂凑。为了访问您需要使用的名称 product["Name"] category["Name"]

    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"
    
        3
  •  0
  •   Jack Ishu    12 年前

    在你的控制器里

    @categories = Category.all
    

    <% @categories.products.each do |product| %>
      <%= product.Name %> <br/>
    <% end %>
    
    推荐文章