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
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.
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With