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

问题描述 投票:0回答:1

将验证添加到外部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 activerecord ruby-on-rails-5
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.