Подтвердить что ты не робот

Как изменить данные приложения Rails?

Я видел много разговоров о Миграции ActiveRecord и о том, следует ли их использовать для изменения данных в вашем приложении, некоторые говорят, что да, некоторые говорят "нет". Мой вопрос: если вы не используете Migrations для этого, то что вы используете? Еще один script, который вы пишете?

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

4b9b3361

Ответ 1

Одна проблема возникает, если вы используете предоставленный

rake db:reset

и

rake db:schema:load

которые используют schema.rb как основу для настройки вашей базы данных. Таким образом, никакие данные не загружаются, и вы застряли.

В Agile Web Development с Rails, Третье издание, которое вы должны получить (если книга Ruby является книгой "Pickaxe", быть книгой "Гамак", кстати?), если вы еще этого не сделали, DHH говорит:

... миграция arent действительно означала переносить данные о семенах. Они слишком временны в природе, чтобы сделать это надежно. Миграции здесь, чтобы вы одна версия схемы к следующей, не создавать новую схему из scratch - у нас есть файл db/schema.rb для этого.

Итак, как только вы на самом деле получить реальное приложение, люди не будут запускать ваши ранние миграции, когда они устанавливают выражение. Theyll начинаются с любая версия хранится в db/schema.rb и игнорировать все эти предыдущие миграции. Это значит, что любые данные, созданные миграциями никогда не попадайте в базу данных, поэтому вы не можете полагаться на него.

Есть много альтернативные способы иметь больше постоянные данные о семени. Самый простой возможно, просто для создания нового файла в db/seed.rb, который содержит Вызов продукта. настроить. Затем этот файл можно вызвать после rake db: schema: load создает начальная схема.

Ответ 2

много раз, миграции лучше всего подходят и не могут быть заменены отдельным script. Представьте себе следующий сценарий: приложение уже используется с текущими данными; столбец кода содержит код в форме "name-zip_code" (да, я знаю, это уродливо, но это происходит), и вы хотите разбить это на два столбца: "имя" и "zip_code", избавляясь от " code '.


def self.up
  add_column :companies, :zip_code, :integer
  add_column :companies, :name, :string
  Company.reset_column_information
  Company.find(:all).each do |company|
    name, zip_code = company.code.split('-')
    company.update_attributes(:name => name, :zip_code => zip_code)  
  end
  remove_column :companies, :code
end

в этом случае, код кода не может быть удален до передачи данных в столбцы имени и почтового индекса.

Ответ 3

Когда мне нужно изменить некоторые данные в базе данных, я создам задачу Rake, которая выполняет некоторую библиотечную функцию для выполнения этой работы. Таким образом, обработка данных будет повторяемой и, если потребуется, может быть запущена и из миграции.