Лучшие практики для загрузки значений по умолчанию в базу данных в рельсах - PullRequest
1 голос
/ 10 августа 2010

У меня есть проект rails, где мне нужно добавить некоторые значения по умолчанию в таблицу базы данных. Я хочу знать лучший способ сделать это (я использую rails 2.3.3, у которого нет файла seed.rb :()

1 - Создание сценария sql

2 - создание миграции

3 - создание граблей

4 - другое (пожалуйста, объясните)

заранее спасибо

ура

Самера

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

В текущей стабильной версии Rails (2.3.8) существует задача rab db: seed, которая выполняет код в файле db / seed.rb.В этом файле вы можете загрузить свои данные, непосредственно выполнив код Rails (News.create: title => "test" ...), или использовать любой другой метод, который вы предпочитаете.Причиной светильники могут быть использованы в тестах позже.Я использую rspec, поэтому мои приборы хранятся в директории spec / fixtures /.

Вы можете использовать следующий код для создания приборов из существующих таблиц sql:

def make_fixtures(tablenames, limit = nil)
  sql = "SELECT * FROM %s"
  sql += " LIMIT #{limit}" unless limit.nil?
  dump_tables = tablenames.to_a
  dump_tables.each do |table_name|
    i = "000"
    file_name = "#{RAILS_ROOT}/spec/fixtures/#{table_name}.yml"
    puts "Fixture save for table #{table_name} to #{file_name}"
    File.open(file_name, 'w') do |file|
      data = ActiveRecord::Base.connection.select_all(sql % table_name )
      file.write( data.inject({}) do |hash, record|
        hash["#{table_name}_#{i.succ!}"] = record
        hash
      end.to_yaml )
    end
  end
end

В дб / seedRB вы можете загрузить из светильников:

require 'active_record/fixtures'

[ "classifiers", "roles", "countries", "states", "metro_areas" ].each do |seed|
  puts "Seeding #{seed}..."
  Fixtures.create_fixtures(File.join(Rails.root, "spec", "fixtures"), seed)
end
0 голосов
/ 10 августа 2010

Взгляните на семя-фу .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...