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

结尾

因为当我在定义类型时注释掉行时,错误消失了,所以问题可能出在定义类型(鹿,猪,鸭)时调用子类。

关于创建子类的更好解决方案的任何想法?我在控制器中这样做:

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