создание таблиц в ruby-on-rails 3 через миграцию? - PullRequest
8 голосов
/ 13 июня 2010

я пытаюсь понять процесс создания таблиц в ruby-on-rails 3.

Я читал о миграциях. поэтому я должен создавать таблицы путем редактирования в файлах в:

Database Migrations/migrate/20100611214419_create_posts
Database Migrations/migrate/20100611214419_create_categories

но они были сгенерированы:

rails generate model Post name:string description:text
rails generate model Category name:string description:text

означает ли это, что мне нужно использовать команду "rails generate model" каждый раз, когда я хочу создать таблицу?

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

и как мне добавить новый файл миграции для обновления? какая команда? и если мне нужно удалить столбцы или редактировать их. как это сделать?

rails generate model Post name:string description:text

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

и если я не использую команды, как мне создать файлы миграции?

в symfony я просто редактирую файл schema.yml напрямую, нет файлов миграции с контролем версий и т. Д.

и я думаю, что в django вы просто создаете модели, и он создает таблицы базы данных.

Я новичок в RoR и хочу получить представление о создании таблиц.

спасибо

Ответы [ 3 ]

11 голосов
/ 13 июня 2010

Если вы хотите обновить таблицу, вы должны создать новый файл миграции, потому что каждая миграция выполняется только один раз в базе данных. Так что если у вас уже есть таблица posts, то после изменения миграции create_posts вы не сможете запустить ее снова.

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

Чтобы создать новую миграцию, просто запустите:

rails generate migration migration_name

Если вы называете свою миграцию add_*_to_table, вы также можете передать те же аргументы, что и в generate model:

rails generate migration add_something_to_posts something:boolean

Это автоматически сгенерирует эту миграцию:

class AddSomethingToPosts < ActiveRecord::Migration
  def self.up
    add_column :posts, :something, :boolean
  end

  def self.down
    remove_column :posts, :something
  end
end

Это будет работать и с remove_*_from_table:

rails generate migration remove_something_from_posts something:boolean

Миграция будет:

class RemoveSomethingFromPosts < ActiveRecord::Migration
  def self.up
    remove_column :posts, :something
  end

  def self.down
    add_column :posts, :something, :boolean
  end
end

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

5 голосов
/ 13 июня 2010

Для генерации автономных файлов миграции вы будете использовать:

rails generate migration your_migration_name_here

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

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

1 голос
/ 15 декабря 2011

Относительно этого вопроса Значит ли это, что мне нужно использовать команду rails generate model каждый раз, когда я хочу создать таблицу?

Попробуйте миграция_для
Я считаю это полезным для меня. Найти инструкцию в блоге автора

rails g migration_for create_table:posts add_column:posts:title:string add_column:posts:user_id:integer add_index:posts:user_id  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...