任何Rails插件添加有关ActiveRecord迁移文件中每列的注释?

时间:2010-09-02 14:30:42

标签: ruby-on-rails activerecord

我想在我的迁移文件中插入COMMENT,它是SQL命令的一部分。

As far as I know, I can add COMMENT to each table and column.

我记不起一个允许我按如下方式编写的插件名称:

    t.string  :name, :comment => "A user's fullname"
    t.string  :label, :comment => "name of color"
    t.text  :value, :comment => "self intro"
    t.integer  :position, :comment => "1 is left, 2 is right"

该语句神奇地被翻译成SQL,就像

create table test (
  name varchar(255) not null COMMENT 'blahblah',
  label varchar(255) null COMMENT 'hahaha'
  text varchar(255) not null,
  position int(11)
);

有人知道插件名吗?


4 个答案:

答案 0 :(得分:6)

无耻插件 - 现在有一个'migration_comments'宝石可用于评论MySQL,SQLite和PostgreSQL。它目前支持Rails 2.3及更高版本。它还与annotate gem(v2.5.0或更高版本)一起在Model / Fixture / Spec文件中生成这些注释。

答案 1 :(得分:5)

我不知道任何可以完成你要求的插件。您可能能够通过查看ActiveRecord::ConnectionAdapters::ColumnDefinition来破解您想要的内容。 (见active_record/connection_adapters/abstract/schema_definitions.rb。)

正如您所看到的,Struct定义了各种列选项(例如:limit:default。)您可以使用:comment扩展该结构,然后修改{{ 1}}生成所需的SQL。您还需要修改#to_sql以设置TableDefinition#column属性。

以下内容已经过测试并且有效(适用于MySQL):

:comment

答案 2 :(得分:1)

在将migration_comments gem用于Oracle之后失败,我只是尝试使用activerecord -v 4.1.1进行以下操作,并正确添加了注释。 因此不再需要额外的宝石。

  ActiveRecord::Schema.define do
    create_table TABLENAME do |table|
      table.column :status, :integer, :comment => "Keeps status for this signal"
      table.column :rowversion, :integer, :comment => "Increments with each change of this record"
      etc..
    end
  end

答案 3 :(得分:1)

使用Rails 5,您现在可以直接为迁移添加注释,而无需使用任何插件。

您可以为表格,列和索引添加注释。

您可以在schema.rb中查看这些注释以及DBA工具。

示例:

class CreateProducts < ActiveRecord::Migration[5.0]
  def change
    create_table :products, comment: 'Products table' do |t|
      t.string :name, comment: 'Name of the product'
      t.string :barcode, comment: 'Barcode of the product'
      t.string :description, comment: 'Product details'
      t.float :msrp, comment: 'Maximum Retail Price'
      t.float :our_price, comment: 'Selling price'

      t.timestamps
    end

    add_index :products, :name, name: 'index_products_on_name', unique: true, comment: 'Index used to lookup product by name.'
  end
end

注意:这仅支持PostgreSQL和MySQL。