我可以使用ActiveRecord Migrations向表或列添加注释吗?

Nat*_*ong 16 activerecord ruby-on-rails rails-migrations

在MySQL(和其他SQL数据库)中,将注释添加到目的可能不明确的表或列中会很有帮助.(例如,搜索MySQL的"注释" 的创建表语法.)

有没有办法在ActiveRecord Migration中执行此操作?我试过没有结果.

create_table :stuff do |t|
  t.integer :obscure_column, :comment => "Explanatory comment"
end
Run Code Online (Sandbox Code Playgroud)

我正在使用Rails 3.1.

Qua*_*ion 17

在对原始问题的评论中提到的migration_comments gem似乎是满足此需求的最佳跨数据库解决方案.除了为添加表和列注释提供迁移支持外,gem还注释schema.rb文件以包含所有注释.完美满足我公司的需求(大型遗留轨道应用程序,其中数据库模型不明确,并与编写本机SQL报告的分析师团队共享).

  • 值得注意的是,Rails 5中的评论已经完成,不需要宝石.Cf"comment"修饰符http://edgeguides.rubyonrails.org/active_record_migrations.html#column-modifiers (2认同)

Ser*_*kij 6

在 Rails 5 中你可以使用change_column

class AddCommentsToReferences < ActiveRecord::Migration[5.2]
  def up
    change_column :references, :achievement_id, :integer, comment: 'Achievement'
    change_column :references, :object_id, :integer, comment: 'Achievement object id'
  end
end
Run Code Online (Sandbox Code Playgroud)

不要忘记写正确的column_type作为第三个参数。

  • 在最新的 Rails 中,可以使用“change_column_comment”,如我的回答 /sf/answers/4240913351/ 中所述 (2认同)

nat*_*vda 5

如果您使用的是postgresql,则有一个名为pg_comment的gem 会添加此功能。

gem添加了额外的命令来添加注释。请注意,postgresql中的语法与mysql中的语法不同,我想这就是为什么没有常规ActiveRecord实现的原因。

例如:

create_table :stuff do |t|
  t.integer :some_value
end
set_table_comment :stuff, 'This table stores stuff.'
set_column_comment :stuff, :some_value, 'Stores some value'
Run Code Online (Sandbox Code Playgroud)

这可能会很冗长,但是我知道有一些不错的工具可以利用它。

其次,Rails确实允许您从Rails内部管理架构(这很棒),似乎足以记录您的迁移,但是过了一会儿再也看不到迁移了。而且您陷入了未记录的架构。

oracle增强的适配器中,此功能从一开始就可用,并且语法与您建议的语法相同。

不幸的是,我还没有找到与MySQL类似的gem或解决方案。


Yuk*_*oue 5

我不知道这个方法是什么时候引入的,但是在最新的rails(6.0)中你可以使用change_column_comment方法。

def change
  change_column_comment(:posts, :state, from: "old_comment", to: "new_comment")
end
Run Code Online (Sandbox Code Playgroud)

参考: https: //api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-change_column_comment