【发布时间】:2015-08-10 21:55:37
【问题描述】:
这种行为非常酷,因为它使编写“面向未来”的迁移变得容易,其中迁移定义了模型类内联,以防以后从代码库中删除该类。但它是如何工作的呢?
$ 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.methods.count
class User < ActiveRecord::Base
end
puts User.methods.count
...
end
当我运行它时:
$ rake db:migrate
687
666
为什么方法在迁移中消失了,但在控制台中却没有?
【问题讨论】:
-
您是否查看过缺少哪些方法?可以比较两个方法数组。
-
我确定缺少来自 ActiveRecord 宏(如
has_many)的实例方法。我猜剩下的方法是当你定义一个从 ActiveRecord::Base 继承的空类时得到的。 -
我明白你在问什么。我相信在 FrobulateUsers 类中创建的 User 类实际上是 FrobulateUsers::User。当你得到 666 时,你计算它的方法。
-
没错!卫生部。想要回答吗? ;)
标签: ruby-on-rails migration monkeypatching