ruby-on-rails - 为什么 null monkeypatch 会删除迁移中的方法而不是 Rails 控制台中的方法?

标签 ruby-on-rails migration monkeypatching

这种行为非常酷,因为它可以轻松编写“面向 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/

相关文章:

ruby-on-rails - Rails OpenSSL::Cipher 为 AES-CBC-256 使用什么样的填充?

ruby-on-rails - 如何使用 Stripe.com 向客户的特定卡收费

ruby-on-rails - HTTParty 的内存问题和下载大文件

java - BCEL == monkeypatching for java 吗?

ruby - Scala Monkey 补丁与 Ruby 的比较

javascript - RAILS/Ruby 错误 "CALL_AND_RETRY_0: Allocation failed - process out of memory"

php - 迁移类别/部分到 joomla 2.5

django - 升级到 Django 2.2 : AttributeError: module 'statistics' has no attribute 'pstdev'

CSS 从 richfaces 3 迁移到 richfaces 4

ruby - Monkey 在有限范围内修补内置的 ruby​​ 类