轨道旧迁移由于模型的验证而失败



i具有使用Active Admin并设计生产的应用程序。我尝试将user_role添加到表admin_users。我还想验证在创建新的管理用户时是否选择了角色名称。因此,我在Rails模型中添加validates :role_id, :presence => true

当我在旧数据库上运行新迁移时,一切正常。但是,当我尝试从头开始应用迁移时,创建管理用户的旧迁移由于模型中添加的验证而失败,说未定义的方法错误。

无需更改旧迁移,并在从UI创建管理员时进行验证,是否可以克服这种情况

我已经面对了这个问题,对我来说,最好的解决方案似乎是修改迁移内部的模型,并通过打开模型的类,以删除有问题的验证(在迁移期间(。

假设您有一个模型Employee,并且firstname列上的验证正在干扰特定的迁移。假设您使用的是Rails 4.2,这应该有效:

class CreateStoreFromPreferences < ActiveRecord::Migration
  def change
    Employee.class_eval do
      _validators.delete(:firstname)
      _validate_callbacks.each do |callback|
        if callback.raw_filter.respond_to? :attributes
          callback.raw_filter.attributes.delete :firstname
        end
      end
    end
    # actual migration code goes here
  end
end

通常,不保证随着模型的发展,旧迁移将保持重复使用。如果您需要重建测试或开发数据库,请使用rake db:schema:load Google此命令,您会发现几篇好文章。

相关内容

  • 没有找到相关文章

最新更新