开发者

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

开发者 https://www.devze.com 2023-01-03 19:25 出处:网络
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:

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  
0

精彩评论

暂无评论...
验证码 换一张
取 消