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

时间:2011-11-08 17:19:27

标签: ruby-on-rails activerecord rails-migrations

在MySQL(和其他SQL数据库)中,向目的可能不清楚的表或列添加注释会很有帮助。 (例如,在MySQL的create table syntax中搜索“评论”。)

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

create_table :stuff do |t|
  t.integer :obscure_column, :comment => "Explanatory comment"
end

我正在使用Rails 3.1。

5 个答案:

答案 0 :(得分:15)

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

答案 1 :(得分:4)

如果你使用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'

这可能会非常冗长,但我知道有一些很好的工具可以利用它。

其次,Rails确实允许您从rails中管理您的架构(这太棒了),记录您的迁移似乎已经足够了,但过了一段时间,没有人再看看迁移了。而且你仍然坚持使用未记录的架构。

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

不幸的是,我没有为MySQL找到类似的宝石或解决方案。

答案 2 :(得分:2)

在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

别忘了写正确的column_type作为第三个参数。

答案 3 :(得分:2)

我不知道何时引入此方法,但是在最新的Rails(6.0)中,您可以使用change_column_comment方法。

def change
  change_column_comment(:posts, :state, from: "old_comment", to: "new_comment")
end

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

答案 4 :(得分:-4)

在Rails精神中,Activerecord将读取数据库,而不是应用程序开发人员,因此不需要注释。

第一件事是让列名清楚(有时候很棘手,我承认)。除此之外,您可以对attr_accessible方法发表评论来描述该列。

您还可以在模型中使用别名 alias_attribute :new_column_name, :column_name_in_db 在rails应用程序中为属性提供一个明确的名称......但它仍然没有在数据库内注释。