我在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
要使其在迁移上下文上可用