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

问题描述 投票:14回答:4

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

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

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

我正在使用Rails 3.1。

ruby-on-rails activerecord rails-migrations
4个回答
17
投票

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


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'

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

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

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

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


3
投票

在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写为第三个参数。


-4
投票

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

第一件事是使列名清晰(有时候很棘手,我承认)。除此之外,您可以对attr_accessible方法进行注释来描述该列。

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

© www.soinside.com 2019 - 2024. All rights reserved.