【问题标题】:How to remove a column from my Rails model?如何从我的 Rails 模型中删除列?
【发布时间】:2011-04-26 07:35:08
【问题描述】:

我需要从我已经创建的 Rails 模型中删除几列,并在该模型中有一些行条目。 怎么做?任何链接都包含在 rails 中修改模式的详细信息? 我使用的是 Rails 版本 3。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

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

    script/rails g migration RemoveColumns
    

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

    def self.up
      remove_column :table_name, :column_name
    end
    

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

    def self.down
      add_column :table_name, :column_name, :type
    end
    

    Rails Guide 对此进行了更详细的说明。

    【讨论】:

    • 您不必在 Rails 3 中指定 script/railsrails g migration RemoveColumns 就足够了。
    【解决方案2】:

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

    命令的形式:

    rails g migration Remove..From.. col1:type col2:type col3:type
    

    例如:

    rails g migration RemoveProjectIDFromProjects project_id:string
    

    生成以下迁移文件:

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

    【讨论】:

    • Rails 4 中是否发生了这种变化?当我尝试使用您的示例时,它只生成了一个更改方法(没有 up/down 方法)。
    • @Dan - 也许吧。我没有在 4 中尝试过。3 是我最后一次尝试这个。今晚稍后我会看看并报告。
    • @Dan - 我应该提到这个 Q 是合适的。为此将其标记为 ruby​​-on-rails-3,因此可能需要一个新的问答环节,其中包含指向此问答环节的链接,以保持联系。
    • 这个 SO Q&A 似乎有更多关于这个主题的内容:stackoverflow.com/questions/2831059/…。 Power 的回答提到了 3 与 4 的差异:stackoverflow.com/a/17792447/33204
    【解决方案3】:

    通过Add替代命令,只需将Add更改为Remove

    单列:

    rails g migration RemoveColumnFromTable column:type
    

    多列:

    rails g migration RemoveColumn1AndColumn2FromTable column1:type colummn2:type
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多