Ruby on rails 为什么null monkeypatch在迁移中删除方法,而在rails控制台中不删除?

Ruby on rails 为什么null monkeypatch在迁移中删除方法,而在rails控制台中不删除?,ruby-on-rails,migration,monkeypatching,Ruby On Rails,Migration,Monkeypatching,这种行为非常酷,因为它可以很容易地编写“面向未来”的迁移,其中迁移将内联定义模型类,以防类稍后从代码库中删除。但是它是如何工作的呢 $ rails c pry(main)> User.methods.count => 686 pry(main)> class User < ActiveRecord::Base; end => nil pry(main)> User.methods.count => 686 为什么方法会在迁移过程中消失,而不会在控制台中

这种行为非常酷,因为它可以很容易地编写“面向未来”的迁移,其中迁移将内联定义模型类,以防类稍后从代码库中删除。但是它是如何工作的呢

$ rails c
pry(main)> User.methods.count
=> 686
pry(main)> class User < ActiveRecord::Base; end
=> nil
pry(main)> User.methods.count
=> 686

为什么方法会在迁移过程中消失,而不会在控制台中消失?

这就是真正的类名

class FrobulateUsers < ActiveRecord::Migration

  puts User.name

  class User < ActiveRecord::Base
  end

  puts User.name

end
一张便条,你可以把它放在教室外面

# 20150810221740_frobulate_users.rb

class User < ActiveRecord::Base
end

class FrobulateUsers < ActiveRecord::Migration

  puts User.name

end

您是否查看过缺少哪些方法?您可以比较这两种方法数组。我可以肯定的是,来自ActiveRecord宏(如
的实例方法有许多
缺失)。我猜剩下的方法就是定义从ActiveRecord::Base继承的空类时得到的方法。我相信在FrobulateUsers类中创建的用户类实际上是FrobulateUsers::User。当你得到666的时候,你的计算方法是正确的!DOH。想回答吗?;)
class FrobulateUsers < ActiveRecord::Migration

  puts User.name

  class User < ActiveRecord::Base
  end

  puts User.name

end
User
FrobulateUsers::User
# 20150810221740_frobulate_users.rb

class User < ActiveRecord::Base
end

class FrobulateUsers < ActiveRecord::Migration

  puts User.name

end
User