Добавьте строки на миграциях

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

20
задан Pablo Fernandez 6 January 2009 в 02:51
поделиться

4 ответа

Вы могли использовать приспособления для этого. Это означает иметь yaml файл где-нибудь с данными, которые Вы хотите вставить.

Вот changeset, который я фиксировал для этого в одном из моего приложения:

db/migrate/004_load_profiles.rb

require 'active_record/fixtures'

class LoadProfiles < ActiveRecord::Migration
  def self.up
    down()

    directory = File.join(File.dirname(__FILE__), "init_data")
    Fixtures.create_fixtures(directory, "profiles")
  end

  def self.down
    Profile.delete_all
  end
end

db/migrate/init_data/profiles.yaml

admin:
 name: Admin
  value: 1
normal:
 name: Normal user
  value: 2
10
ответ дан 29 November 2019 в 22:56
поделиться

Документация API направляющих для миграций показывает более простой способ достигнуть этого.

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

class CreateProductCategories < ActiveRecord::Migration
  def self.up
    create_table "product_categories" do |t|
      t.string name
      # etc.
    end

    # Now populate the category list with default data

    ProductCategory.create :name => 'Books', ...
    ProductCategory.create :name => 'Games', ... # Etc.

    # The "down" method takes care of the data because it
    # drops the whole table.

  end

  def self.down
    drop_table "product_categories"
  end
end

Протестированный на направляющих 2.3.0, но это должно работать на многие более ранние версии также.

38
ответ дан 29 November 2019 в 22:56
поделиться

Ваши миграции имеют доступ ко всем Вашим моделям, таким образом, Вы не должны создавать класс в миграции.

я использую последние направляющие, и я могу подтвердить, что пример, который Вы отправили определенно, ДОЛЖЕН работать.

Однако миграции являются специальным зверем. Пока Вы ясны, я не вижу ничто плохого с ActiveRecord::Base.connection.execute("INSERT INTO product_types (name) VALUES ('type1'), ('type2')").

преимущество для этого, можно легко генерировать его при помощи некоторого GUI или веб-фронтенда для заполнения стартовых данных и затем выполнения mysqldump -uroot database_name.product_types.

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

3
ответ дан 29 November 2019 в 22:56
поделиться

Вы также можете определить в вашем файле seeds.rb, например:

Grid.create :ref_code => 'one' , :name => 'Grade Única'

и после запуска:

rake db:seed
7
ответ дан 29 November 2019 в 22:56
поделиться
Другие вопросы по тегам:

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