Ruby on rails 3 - 忽略 ActiveRecord 中的列



我正在尝试将旧的,传统的Rails 3应用程序合并到更新的Django应用程序中。

这两个应用程序过去都使用不同的数据库,这些数据库正在合并到两个应用程序可用的唯一数据库中。Django 应用程序将慢慢接管旧 Rails 应用程序的功能,从迁移开始。

Django 在其迁移中强制执行严格的数据库约束(例如 NOT NULL具有默认值的字段)。两个应用程序使用的表上的任何新字段都将阻止 Rails 更新该表上的记录,因为 ActiveRecord 会强制插入NULL值而不是默认值。

由于我们不会向 Rails 应用程序添加新功能,我希望它坚持使用字段列表并忽略任何新添加的字段。

以下使用 default_scope 的答案会破坏其他范围,因此我想避免它。

触发器是一种选择,但我并不热衷于在 Django 应用程序中添加 cruft,只是为了处理 Rails 应用程序中的遗留代码。

因此:我可以在我的模型中手动定义列而不是让 ActiveRecord 自动检查数据库吗?

Rails 5 通过提供ignore_columns选项解决了您的问题。

class User < ActiveRecord::Base
  self.ignored_columns = %w(employee_email)
end

User.columns不会在输出中给出employee_email

即使在古代版本的 Rails(例如 Rails 2.3)中,您也可以通过覆盖 ActiveRecord::Base.columns 来实现您想要的:

class Model < ActiveRecord::Base
  def self.columns
    super.reject { |c| c.name.in?(['column1', 'column2']) }
  end
end

这相当于 Rails 5 中的ignore_columns

如果你使用的是较低版本的 Rails,则可以使用可忽略的 gem

https://github.com/nthj/ignorable

ignore_columns :属性

相关内容

  • 没有找到相关文章

最新更新