涉及具有祖先的模型的迁移失败,因为找不到has_arcestry方法



我在Rails 4应用程序中使用了祖先宝石。我的祖先模型是这样的:

class Product < ActiveRecord::Base
  has_ancestry
  has_many :company_products, dependent: :destroy
  has_many :companies, through: :company_products
  validates_presence_of :name
end

此代码有效。我可以在ActiveAdmin界面中管理它,甚至可以为与此类模型的HABTM关系设置嵌套复选框。

但是,当尝试使用此代码(文件名:20160412201550_add_code_to_products.rb)运行迁移时:

class AddCodeToProducts < ActiveRecord::Migration
  def change
    change_table :products do |table|
      table.string :code, limit: 100, null: false, default: ''
    end
    reversible do |direction|
      direction.up do
        {passage: 'Passage', harbor: 'Harbor'}.each do |k, v|
          index = 0
          Product.where(name: v).each do |product|
            code = index > 0 ? "#{k}#{index}" : k
            product.update! code: code
          end
        end
      end
      direction.down do
        # nothing here
      end
      add_index :products, :code, unique: true
    end
  end
end

当达到涉及Product的句子时,它会爆发,大喊:

NameError:#的未定义局部变量或方法"has_arcestry"

堆栈跟踪显示额外的行。相关的是:

/home/myusername/Proyectos/myproject/app/models/product.rb:3:in `<class:Product>'

这是Product模型类定义中的has_ancestry行。

简言之:

  • 如果我运行标准服务器(rails s),这将非常有效
  • 如果我运行迁移,就会爆发这种情况NO:调用require 'ancestry'不会修复它,因为它会引发另一个异常:LoadError: cannot load such file -- ancestry

如何为迁移上下文加载祖先?

似乎ancestry有缺陷。在gemfile:中修复了它

gem 'ancestry', require: true

要使其在迁移上下文上可用

相关内容

  • 没有找到相关文章

最新更新