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开发者_C百科 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
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.
To generate stand alone migration files, you'll use:
rails generate migration your_migration_name_here
Once you go to the generated file you can execute any SQL you like, looking at the other generated migrations will give you a good starting point as well.
Generally in Rails, you have a model for every table you have in your database. I can't think of any specific use cases where you'll have a table without some sort of model to access that data. If you want to get an in depth look of migrations, go here.
Regarding this question Does this mean I have to use rails generate model
command everytime I want to create a table?
Try migration_for
I find this helpful for me. Find the instruction on author's blog
rails g migration_for create_table:posts add_column:posts:title:string add_column:posts:user_id:integer add_index:posts:user_id
精彩评论