如何从我的Rails模型中删除列?

Hem*_*nth 49 ruby-on-rails ruby-on-rails-3

我需要从我已经创建的rails模型中删除一些列,并在该模型中包含一些行条目.怎么做?是否包含有关在rails中修改架构的详细信息的链接?我正在使用rails版本3.

小智 58

要删除数据库列,您必须生成迁移:

script/rails g migration RemoveColumns
Run Code Online (Sandbox Code Playgroud)

然后在self.up类方法中删除列:

def self.up
  remove_column :table_name, :column_name
end
Run Code Online (Sandbox Code Playgroud)

您可能还想将它们添加回self.down类方法中:

def self.down
  add_column :table_name, :column_name, :type
end
Run Code Online (Sandbox Code Playgroud)

Rails的指南此进入更多的细节.

  • 您不必使用Rails 3指定`script/rails``tracks g migration RemoveColumns`就足够了. (3认同)

slm*_*slm 41

如果您知道要删除的列,则可以使用约定:在命名迁移时删除..从.. 此外,您可以在运行迁移命令时包含列名称.

命令的形式:

rails g migration Remove..From.. col1:type col2:type col3:type
Run Code Online (Sandbox Code Playgroud)

例如:

rails g migration RemoveProjectIDFromProjects project_id:string
Run Code Online (Sandbox Code Playgroud)

生成以下迁移文件:

class RemoveProjectIdFromProjects < ActiveRecord::Migration
  def self.up
    remove_column :projects, :project_id
  end

  def self.down
    add_column :projects, :project_id, :string
  end
end
Run Code Online (Sandbox Code Playgroud)

  • Rails 4中的这个改变了吗?当我尝试使用你的例子时,它只生成了一个改变方法(没有上/下方法). (2认同)
  • 经过一番研究后,看起来Rails 4中只应该有一个更改方法.remove_column现在采用的数据类型必须是它如何处理添加列的方式. (2认同)

Ged*_*nas 5

通过命令替代项as Add,仅更改AddRemove

单列:

rails g migration RemoveColumnFromTable column:type
Run Code Online (Sandbox Code Playgroud)

多列:

rails g migration RemoveColumn1AndColumn2FromTable column1:type colummn2:type
Run Code Online (Sandbox Code Playgroud)