Как я добавляю некоторые вставки в миграции направляющих?

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

спасибо

36
задан xaver23 19 April 2010 в 13:06
поделиться

3 ответа

Обновление: Это правильный ответ: https://stackoverflow.com/a / 2667747/7852


Вот пример из ruby ​​на rails api :

 class AddSystemSettings < ActiveRecord::Migration
    # create the table
    def self.up
      create_table :system_settings do |t|
        t.string  :name
        t.string  :label
        t.text  :value
        t.string  :type
        t.integer  :position
      end

      # populate the table
      SystemSetting.create :name => "notice", :label => "Use notice?", :value => 1
    end

    def self.down
      drop_table :system_settings
    end
  end
10
ответ дан 27 November 2019 в 05:19
поделиться

Не . Если вы ищете начальные данные, вам следует использовать вместо них db / seed.rb и rake db: seed . Подробнее в этом Railscast .

Примечание: всегда проверяйте, что код в db / seed.rb идемпотентен. т.е. повторный запуск семян всегда должен быть безопасным.

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

execute "insert into system_settings (name, label, value) values ('notice', 'Use notice?', 1)"
87
ответ дан 27 November 2019 в 05:19
поделиться

создайте новый файл миграции, например 047_add_rows_in_system_settings.rb

 class AddRowsInAddSystemSettings < ActiveRecord::Migration
        def self.up
          SystemSetting.create{:name => "name1", :label => "Use notice?", :value => 1}
          SystemSetting.create{:name => "name2", :label => "Use notice?", :value => 2}
         end

        def self.down
          SystemSetting.delete_all
        end
      end

ИЛИ

, при создании таблицы

046_system_settings.rb

class AddSystemSettings < ActiveRecord::Migration
    def self.up
      create_table :system_settings do |t|
        t.string  :name
        t.string  :label
        t.text  :value
        t.string  :type
        t.integer  :position
      end

      SystemSetting.create :name => "notice", :label => "Use notice?", :value => 1
    end

    def self.down
      drop_table :system_settings
    end
  end

Ссылка: - http: //api.rubyonrails. org / classes / ActiveRecord / Migration.html

4
ответ дан 27 November 2019 в 05:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: