2015-06-03 4 views
2

У меня есть следующий переход:Rails миграции не применяется

class MoveInventoryItems < ActiveRecord::Migration 
     def up 
     schraenke = ('F'..'J') 
     List::Inventory::Item.find_each do |item| 
      if schraenke.include?(item.location[0]) 
       item.location[0] = item.location[0].next.next 
       item.save! 
      end 
     end 
     end 
    end 

Я пытаюсь изменить переменную для конкретных элементов. Когда я пытаюсь вывести элемент после сохранения, он выглядит правильно. При запуске миграции он не обнаруживает ошибок. Но, очевидно, он действительно не обновляется, поскольку старые значения все еще отображаются при запуске сервера.

Так что мой вопрос: как миграция не может обновлять данные?

ответ

0

На самом деле, это метод класса, и вы можете заменить выше код на следующий код, он будет обновлять запись.

class MoveInventoryItems < ActiveRecord::Migration 
    def self.up 
    schraenke = ('F'..'J') 
    List::Inventory::Item.find_each do |item| 
     if schraenke.include?(item.location[0]) 
     item.location[0] = item.location[0].next.next 
     item.save! 
     end 
    end 
    end 

    def self.down 
    #put reverse code of above, it will execute when you rollback migration 
    end 
end 
+0

Все еще ничего не меняет. Может быть, «rake db: upgrade» каким-то образом применяется к неправильной базе данных? – Magnus

+0

Теперь он не обновляется, так как эта миграция уже запущена, а ее версия хранится в схеме, решение заключается в том, чтобы разбить db: rollback, а затем запустить его снова –

Смежные вопросы