通过迁移在ruby-on-rails 3中创建表?

nev*_*ame 8 ruby-on-rails

我试图了解在ruby-on-rails 3中创建表的过程.

我读过有关迁移的内容.所以我应该通过编辑文件来创建表格:

Database Migrations/migrate/20100611214419_create_posts
Database Migrations/migrate/20100611214419_create_categories
Run Code Online (Sandbox Code Playgroud)

但它们是由以下因素产生的

rails generate model Post name:string description:text
rails generate model Category name:string description:text
Run Code Online (Sandbox Code Playgroud)

这是否意味着每次我想创建一个表时我都要使用"rails generate model"命令?

如果我创建一个迁移文件但想要添加列,该怎么办?我是否创建了另一个迁移文件来添加或直接编辑现有的迁移文件?导游告诉我添加一个新的,但这是我不明白的部分.我为什么要加一个新的?因此,新状态将依赖于2个迁移文件.

以及如何添加新的迁移文件进行更新呢?什么是命令?如果我必须删除列或编辑它们.怎么做到这一点?

rails generate model Post name:string description:text
Run Code Online (Sandbox Code Playgroud)

导致上面的命令只添加列.

如果我不使用命令,我如何创建迁移文件?

在symfony中我只是直接编辑一个schema.yml文件,没有带版本控制的迁移文件等等.

我想在django你只需创建模型,它将创建数据库表.

我是RoR的新手,想要了解创建表的图片.

谢谢

Tom*_*kas 11

如果要更新表,则必须创建新的迁移文件,因为每次迁移仅在数据库上执行一次.因此,如果您已经有一个posts表,那么在修改create_posts迁移后,您将无法再次运行它.

您可以回滚迁移,然后再次运行它们.这将解决问题,但它也会破坏表和它可能拥有的数据.如果您刚刚创建了迁移,然后发现您错过了一列,则这不是问题.然后,您只需将该列添加到迁移,回滚和迁移.但是你不想在生产数据库上这样做!

要创建新的迁移,您只需运行:

rails generate migration migration_name
Run Code Online (Sandbox Code Playgroud)

如果您调用迁移,add_*_to_table那么您也可以传递与以下相同的参数generate model:

rails generate migration add_something_to_posts something:boolean
Run Code Online (Sandbox Code Playgroud)

这将自动生成此迁移:

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

  def self.down
    remove_column :posts, :something
  end
end
Run Code Online (Sandbox Code Playgroud)

这也适用remove_*_from_table:

rails generate migration remove_something_from_posts something:boolean
Run Code Online (Sandbox Code Playgroud)

迁移将是:

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

  def self.down
    add_column :posts, :something, :boolean
  end
end
Run Code Online (Sandbox Code Playgroud)

您可以在迁移中使用以下一些方法.

  • 除非回滚被破坏,否则不应在回滚之前修改迁移.因为在添加新列时,还必须删除回滚列.但是,db模式当前不包含新列,因此回滚不正确.我不确定这是否有错误,但要避免. (2认同)

Gar*_*ett 5

要生成独立的迁移文件,您将使用:

rails generate migration your_migration_name_here
Run Code Online (Sandbox Code Playgroud)

一旦你转到生成的文件,你就可以执行你喜欢的任何SQL,查看其他生成的迁移也会给你一个很好的起点.

通常在Rails中,您拥有数据库中每个表的模型.我想不出任何特定的用例,你会有一个没有某种模型的表来访问这些数据.如果您想深入了解迁移,请转到此处.