Таблица усечений при миграции по методу ActiveRecord Rails 3.1 - PullRequest
5 голосов
/ 15 ноября 2011

В моем методе up для миграции начальных данных определено следующее:

  def up
    Color.create!({:id=>1,:name=>"",:color=>"FF6633"})
    Color.create!({:id=>2,:name=>"",:color=>"93B233"})
    Color.create!({:id=>3,:name=>"",:color=>"4D90D9"})
    Color.create!({:id=>4,:name=>"",:color=>"C43092"})
  end

Существует ли какая-либо директива truncate, которую можно добавить к методу down, например:

def down
   Color.truncate
end

Или, так как я устанавливаю идентификаторы для создания, я должен использовать только метод destroy_all модели Color?

Ответы [ 2 ]

7 голосов
/ 16 апреля 2013

Вы можете просто использовать это в своем методе up, это также решит вашу проблему усечения и сброса идентификатора.

def up    
   ActiveRecord::Base.connection.execute("TRUNCATE table_name")  
   Color.create!({:id=>1,:name=>"",:color=>"FF6633"})  
   Color.create!({:id=>2,:name=>"",:color=>"93B233"})  
   Color.create!({:id=>3,:name=>"",:color=>"4D90D9"})  
   Color.create!({:id=>4,:name=>"",:color=>"C43092"})  
end

Ура!

0 голосов
/ 17 июля 2012

Во-первых, вам не нужно передавать :id в create!, потому что ActiveRecord автоматически обработает это, поэтому :id может быть проигнорировано (предполагается стандартный случай).

Во-вторых,не рекомендуется использовать построитель запросов ActiveRecord в процессе миграции, потому что в случае изменения названия модели в цвете у вас может возникнуть неправильная миграция.Я настоятельно рекомендую вам использовать чистый SQL и выполнять этот запрос с помощью execute().

В-третьих, для метода #down не следует усекать таблицу.Вы должны уничтожить те 4 цвета, которые вы создали в #up.

Вот как я бы написал:

def down
  colors = ["FF6633", "93B233", "4D90D9", "C43092"]
  Color.where(:color => colors).destroy_all
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...