1

次のような Mongoid クラスがあります。

class Order
  include Mongoid::Document
  embeds_many :animals
end

class Animal
  include Mongoid::Document
  embedded_in :order

  def self.has_gender
    field :gender, type: String
  end
end

class Deer < Animal
  has_gender
end

そして、動物を任意の順序で呼び出すと、空の動物であっても:

Order.new.animals

次のエラーが表示されます。

undefined method `has_gender' for Deer:Class

何か案は?

4

2 に答える 2

1

問題は別の場所にあります。あなたのコードは私のマシンで動作します。(ただし、Mongoid 3.0-rc を使用しています)。

order = Order.new
order.animals << Animal.new
order.animals << Deer.new
order.save

puts Order.first.animals
# >> #<Animal:0x007fca04bae890>
# >> #<Deer:0x007fca04bb4b50>
于 2012-07-09T23:27:32.147 に答える
1

サブクラスを作成する方法に問題があると思います:

class Game
  include Mongoid::Document
  TYPES = {'deer' => Deer, 'pig' => Pig, 'duck' => Duck}
  def self.new_of_type(type, attrs={})
    TYPES[type].new attrs
  end

終わり

TYPESを定義するときに行をコメントアウトするとエラーが消えたため、TYPES(Deer、Pig、Duck)を定義するときにサブクラスを呼び出すことに問題がある可能性があります。

サブクラスを作成するためのより良いソリューションのアイデアはありますか? 私はコントローラーでこのようにやっています:

class GamesController < ApplicationController
  def create
    @game = Game.new_of_type params[:type], params[:game]
    @game.save
  end
end
于 2012-07-09T23:37:22.020 に答える