2016-04-12 5 views
0

Я использую камень в приложении 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.

Как я могу заставить родословную загружаться для контекста миграции?

+0

интересного. вы пытались «требовать» родословную в вашей миграции? – trh

+0

Да (правильно процитировано, но да) –

+0

Хех .. извините, я неправильно прочитал ваше последнее заявление и пытался понять, почему вы не нуждаетесь - я вижу сейчас - причудливый – trh

ответ

1

Похоже, что ancestry является ошибкой. Фиксированный его в Gemfile:

gem 'ancestry', require: true 

Чтобы иметь его на кочевки контекста