在MySQL(和其他SQL数据库)中,向目的可能不清楚的表或列添加注释会很有帮助。 (例如,在MySQL的create table syntax中搜索“评论”。)
有没有办法在ActiveRecord Migration中执行此操作?我试过没有结果。
create_table :stuff do |t|
t.integer :obscure_column, :comment => "Explanatory comment"
end
我正在使用Rails 3.1。
答案 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
答案 4 :(得分:-4)
在Rails精神中,Activerecord将读取数据库,而不是应用程序开发人员,因此不需要注释。
第一件事是让列名清楚(有时候很棘手,我承认)。除此之外,您可以对attr_accessible
方法发表评论来描述该列。
您还可以在模型中使用别名
alias_attribute :new_column_name, :column_name_in_db
在rails应用程序中为属性提供一个明确的名称......但它仍然没有在数据库内注释。