Для одной из моих моделей у меня есть несколько экземпляров, которые нужно заполнить автоматически. Как мне справиться с этим? - PullRequest
2 голосов
/ 28 января 2009

Я должен быть конкретным для этого, чтобы иметь смысл. В моем приложении есть модель с названием theme, которая содержит информацию о цветовой теме виджета. Мы предоставляем несколько тем, но в основном полагаемся на то, что пользователь создает свои собственные темы. Итак, вопрос: где я храню свои темы? Если я сохраню их в базе данных тем, то каждый раз, когда я переключаю базы данных или сбрасываю их во время тестирования, я должен заново вводить темы. Это не так уж сложно, просто кажется небрежным.

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

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

Спасибо!

Tony

Ответы [ 3 ]

4 голосов
/ 30 января 2009

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

3 голосов
/ 29 января 2009

Данные темы принадлежат базе данных.

Для тестирования инициализируйте данные темы с помощью приборов или метода setup. Для разработки и производства вы должны создать способ заполнения базы данных исходными данными темы. Пользовательское задание Rake хорошо для этого. Фактические данные темы могут быть сохранены в любом формате, который вы хотите. Например, SQL-скрипты или YML-фиксации .

Я использую следующую задачу Rake для заполнения базы данных данными, хранящимися в файлах SQL в db / seeddata (поместите это в файл .rake в каталоге / lib вашего проекта):

namespace :db do
  desc "Load seed fixtures (from db/seeddata) into the current environment's database." 
  task :seed => :environment do
    require 'yaml'
    config = YAML::load(open("#{RAILS_ROOT}/config/database.yml"))["#{RAILS_ENV}"]
    Dir.glob(RAILS_ROOT + '/db/seeddata/*.sql').each do |file|
      cmd = "mysql -u #{config['username']} -p#{config['password']} -h #{config['host']} #{config['database']} < #{file}"
      `#{cmd}`
    end
  end
end
1 голос
/ 29 января 2009

Ваша идея посеять данные, кажется, путь. Мне нравится метод, который вы предложили, но что вы думаете о методе, предложенном здесь: http://railspikes.com/2008/2/1/loading-seed-data

Предполагается, что вы позволите ActiveRecord обрабатывать заполнение данных, чтобы они могли проверять данные.

Как вы думаете, что лучше?

Еще раз спасибо!

Tony

...