我试图了解在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)
您可以在迁移中使用以下一些方法.
要生成独立的迁移文件,您将使用:
rails generate migration your_migration_name_here
Run Code Online (Sandbox Code Playgroud)
一旦你转到生成的文件,你就可以执行你喜欢的任何SQL,查看其他生成的迁移也会给你一个很好的起点.
通常在Rails中,您拥有数据库中每个表的模型.我想不出任何特定的用例,你会有一个没有某种模型的表来访问这些数据.如果您想深入了解迁移,请转到此处.