ruby-on-rails - 如何使用 ActiveRecord 3.1 在不停机的情况下删除列?

标签 ruby-on-rails ruby ruby-on-rails-3 activerecord

在使用 ActiveRecord 运行应用程序时从表中删除列会导致错误,因为 ActiveRecord 会缓存列名。

其他版本的 ActiveRecord 的解决方法是覆盖模型中的#columns 方法并在迁移前过滤掉不推荐使用的列名称(基本上 - 对 AR 隐藏这些列)。这是有效的,因为所有与列名相关的方法都基于#columns 调用

在 ActiveRecord 3.1 中,表结构的缓存被移至 ConnectionPool,并且所有与列名相关的值(例如 coluumns_hash)都被独立缓存(3.2 使用 ModelSchema.columns 使其再次工作)

在 ActiveRecord 3.1 中是否有任何方法(除了具体适配器的深度破解)来实现安全的列删除?

最佳答案

TST Media 的 Luke Ludwig 提供了一个解决方案 here .本质上,它们“覆盖了正在删除其列的类的 ActiveRecord::Base.columns 方法。”

(解决方案适用于除 3.1 之外的所有内容)

关于ruby-on-rails - 如何使用 ActiveRecord 3.1 在不停机的情况下删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518192/

相关文章:

ruby-on-rails - Rails 开发效率 - 顶级 Textmate 快捷方式

ruby-on-rails - 关于Ruby中symbol和instance method的一些问题

ruby-on-rails - Activerecord:为表使用别名时出现类型错误

ruby-on-rails - 在 Rails 中使用 accepts_nested_attributes_for + 批量赋值保护

ruby - 从 Ruby 散列中移动一个特定的匹配键值对

ruby-on-rails - rails 3.2 是否有更新的 rails_sql_views gem?

ruby-on-rails-3 - Rails jbuilder 删除 header

ruby-on-rails - 尝试使用 Rspec 和 FactoryGirl 创建列表时验证失败?

ruby-on-rails - 结合 meta_search 与 acts_as_taggable_on

ruby-on-rails - Rails 和 docker - 无法安装 json gem