Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

creating tables in ruby-on-rails 3 through migrations?

im trying to understand the process of creating tables in ruby-on-rails 3.

i have read about migrations. so i am supposed to create tables by editing in the files in:

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

but they were generated by:

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

does this mean i have to use "rails generate model" command everytime i want to create a table?

what if i create a migration file but want to add columns. do i create another migration file for adding those or do i edit the existing migration file directly? the guide told me to add a new one, but here is the part i dont understand. why would i add a new one? cause then the new state will be dependent of 2 migration files.

and how do i add a new migration file for updating then? what is the command? and if i have to drop columns or edit them. how do it do that?

rails generate model Post name:string description:text

cause the above command just add columns.

and if i don't use the commands, how do i create migration files?

in symfony i just edit a schema.yml file directly, there are no migration files with versioning and so on.

and i think in django you just create the models and it will create the database tables.

im new to RoR and want to get the picture of creating tables.

thanks

like image 616
never_had_a_name Avatar asked Jun 13 '10 07:06

never_had_a_name


People also ask

How do I migrate a database in Ruby on Rails?

Go to db/migrate subdirectory of your application and edit each file one by one using any simple text editor. The ID column will be created automatically, so don't do it here as well. The method self. up is used when migrating to a new version, self.

How do I create a database Migrate?

Creating Migrations To create a migration, execute db-migrate create with a title. node-db-migrate will create a node module within ./migrations/ which contains the following two exports: exports. up = function (db, callback) { callback(); }; exports.

What is difference between model and migration in rails?

Rails Model (Active Record) works with SQL, and Rails Migration works with DDL. Rails Model supports ways to interact to with the database, while Rails Migration changes the database structure. A migration can change the name of a column in books table.

What is database migration Ruby?

Migrations are a convenient way to alter your database schema over time in a consistent way. They use a Ruby DSL so that you don't have to write SQL by hand, allowing your schema and changes to be database independent. You can think of each migration as being a new 'version' of the database.


1 Answers

If you want to update a table you have to create a new migration file because each migrations is executed only once on the database. So if you already have a posts table then after modifying the create_posts migration you won't be able to run it again.

You can rollback migrations and then run them again. That would solve the problem but it would also destroy the table and the data that it might hold. This isn't a problem if you just created the migration and then noticed that you missed one column. Then you can just add the column to the migration, rollback and migrate. But you don't want to do that on a production database!

To create a new migration you just run:

rails generate migration migration_name

If you call your migration add_*_to_table then you can also pass the same arguments as in generate model:

rails generate migration add_something_to_posts something:boolean

This will automatically generate this migration:

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

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

This will work with remove_*_from_table too:

rails generate migration remove_something_from_posts something:boolean

The migration will be:

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

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

Here are some more methods that you can use in your migrations.

like image 172
Tomas Markauskas Avatar answered Oct 19 '22 18:10

Tomas Markauskas