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 が性別で初期化された後、通信メソッドがキャッシュされ、config/environments/test.rb で cache_classes が false に設定されていても、すべての Chicken は性別に関係なく同じことを言います。

テストの実行中に Chicken クラスをリロードするか、このコードを変更してこの問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

代わりに、単一テーブルの継承 ( http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Single+table+inheritance )に切り替えることにしました。これにより、この問題が解決されることが期待されます。

于 2013-12-05T18:28:52.313 に答える