这种行为非常酷,因为它可以轻松编写“面向 future ”的迁移,其中迁移定义内联模型类,以防该类稍后从代码库中删除。但它是如何工作的?
$ 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
为什么这些方法在迁移中消失了,但在控制台中却没有?
最佳答案
搞乱这个,这是真正的类名......
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
关于ruby-on-rails - 为什么 null monkeypatch 会删除迁移中的方法而不是 Rails 控制台中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929847/