0

以下に示すように、カテゴリクラス内に埋め込みドキュメントとして製品があります。

require 'mongo_mapper'

class Category

include MongoMapper::Document

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

end

ここに Product クラスがあります:

require 'mongo_mapper'

class Product

include MongoMapper::EmbeddedDocument

  key :Name, String

end

次のコードを使用して製品を表示していますが、メソッド「名前」が見つかりませんと表示されます。

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)
4

3 に答える 3

2

さて、最初に試すことは、あなたが持っていることです:

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
于 2010-07-19T17:32:53.310 に答える
0

あなたのコントローラーで

@categories = Category.all

意見

<% @categories.products.each do |product| %>
  <%= product.Name %> <br/>
<% end %>
于 2012-01-18T15:55:16.983 に答える
0

返されるオブジェクトは、ハッシュのように機能します。名前にアクセスするには、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"
于 2010-07-19T17:34:36.393 に答える