验证外部gem的ActiveRecord模型的最佳方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了验证外部gem的ActiveRecord模型的最佳方法相关的知识,希望对你有一定的参考价值。

将验证添加到外部Gem的activerecord模型的最佳方法是什么?

module Library
    class Model < ActiveRecord::Base
       validates :field_active, inclusion: { in: [true, false] }
    end
end

我想添加另一个validates,例如

validates :me_too, presence: true

但由于它是外部宝石,所以不可能只在validates :field_active下面添加它。

我想知道这样做的最佳做法是什么。 class_eval是最好的方式还是不赞成?

答案

Ruby有所谓的“开放课程”。您可以打开任何类(在任何时候)并添加更多方法。这应该工作:

module Library
  class Model
    validates :me_too, presence: true
  end
end

它打开已经定义的Library::Model,只是添加了一行代码到那里已经存在(不替换/删除现有代码)。

请注意,这取决于Library::Model已经加载(这不能保证)。这应该是一个更安全的选择:

Library::Model.instance_eval do
  validates :me_too, presence: true
end

如果它尚未加载,它将触发加载Library::Model

以上是关于验证外部gem的ActiveRecord模型的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将 ActiveRecord 模型数组转换为 CSV?

审计与 Rails Audited gem 的深度关联

如何向 Rails 4 中的所有 ActiveRecord 模型添加 `audited` 方法调用?

ActiveRecord 惰性加载,和使用gem faker

Gem "audited-activerecord", "~> 4.0 给出了未定义的方法 `audits'

ActiveRecord:对等模型