2012-07-13 166 views
6

如何通过终端使用ActiveRecord将列添加到表中。我试图使用add_column方法,但它不工作。请有任何想法吗?通过终端添加列

+0

你使用了哪个数据库? – cdesrosiers 2012-07-13 20:06:40

+1

最好写一个移植 – 2012-07-13 20:07:42

+0

Im使用铁路的默认值,如果我没有弄错,是SQLite ......但是,它应该不重要,因为我通过使用ActiveRecord抽象SQL代码。我生成了一个账户模型,并忘记插入一个电子邮件字段名,并希望添加它... – Sweebo 2012-07-13 20:10:27

回答

8

如果你正在与一个团队合作,那么写一个迁移和一个必须是最好的。当你做数据库更改时,每个开发人员的环境也必须更新。否则,你会遇到一些疯狂的开发人员。

rails generate migration AddPartNumberToProducts part_number:string 

会产生

class AddPartNumberToProducts < ActiveRecord::Migration 
    def change 
    add_column :products, :part_number, :string 
    end 
end 

然后运行迁移

rake db:migrate 

http://guides.rubyonrails.org/migrations.html

编辑:

为Rails控制台命令行检查@ tadman的答案,或者用什么Bengala提出像

ActiveRecord::Migration.add_column :products, :part_number, :string 
+0

Thx寻求帮助。关于产品型号,我认为您必须添加访问器以手动满足新列。 Rails不会自动编辑模型? – Sweebo 2012-07-15 22:47:08

+0

@Sweebo,正确 – 2012-07-16 01:18:56

+0

你没有回答这个问题 – Bengala 2016-05-24 17:05:54

3

如果你只是在黑客入侵,使用某种类型的SQLite客户端比通过Rails DB层操纵数据库通常更容易。

如果您正在为一个项目执行此操作,请创建一个适当的迁移文件并运行它。

如果您决定执行此操作,则可通过驱动程序对象ActiveRecord::Base.connection获取add_column方法。

8

您可以直接在铁轨控制台rails cActiveRecord::Migration

运行迁移你的目的下一个命令会做什么你请问:

> ActiveRecord::Migration.add_column :table_name, :field_name, :field_type 
+0

谢谢你。当然,最好几乎每时每刻都要写一次迁移。但是_sometimes_,你确切地知道你在做什么,只是想直接运行一个更改:) – FeifanZ 2016-12-04 20:55:35

+0

是的,但他没有问如何做一个迁移,他问如何通过终端添加一列。我认为这是合适的答案。 – Bengala 2017-02-22 19:01:22