Я использую камень в приложении Rails 4. Моя модель с исковой давностью выглядит так:Миграция, связанная с моделью с ошибкой родословной, потому что метод has_ancestry не найден
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: undefined local variable or method `has_ancestry' for #
Трассировка стека показывает дополнительные строки. Соответствующий одно:
/home/myusername/Proyectos/myproject/app/models/product.rb:3:in `<class:Product>'
Какой has_ancestry
строка в определении класса Product
модели.
Итак, вкратце:
- Это отлично работает, если я запустить стандартный сервер (
rails s
). - Это взрывается, если я запускаю миграции. NO: звонок
require 'ancestry'
не исправляет его, так как он вызывает другое исключение:LoadError: cannot load such file -- ancestry
.
Как я могу заставить родословную загружаться для контекста миграции?
интересного. вы пытались «требовать» родословную в вашей миграции? – trh
Да (правильно процитировано, но да) –
Хех .. извините, я неправильно прочитал ваше последнее заявление и пытался понять, почему вы не нуждаетесь - я вижу сейчас - причудливый – trh