1

我有以下型号

class Chicken < ActiveRecord::Base

  after_initialize :grow_up

  def grow_up
    if gender == "female"
      self.class.send(:include, Hen)
    elsif gender == "male"
      self.class.send(:include, Rooster)
    end
  end

end

module Hen

   def communicate
     "cluck cluck!"
   end

end

module Rooster

   def communicate
     "cock-a-doodle-doo!"
   end

end

然而,在运行 rspec 测试时,在第一个 Chicken 初始化为性别后,通信方法被缓存并且所有 Chicken 都独立于他们的性别说出相同的内容,即使在 config/environments/test.rb 中将 cache_classes 设置为 false

如何在测试执行期间重新加载 Chicken 类或修改此代码以消除此问题?

4

1 回答 1

0

我决定改用单表继承(http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance),这有望解决这个问题。

于 2013-12-05T18:28:52.313 回答