ruby-on-rails 是否可以使用ActiveRecord Migrations向表或列添加注解?

pinkon5k  于 2023-05-30  发布在  Ruby
关注(0)|答案(5)|浏览(161)

在MySQL(和其他SQL数据库)中,向目的可能不明确的表或列添加注解可能很有帮助。(例如,在MySQL的create table syntax中搜索“comment”。
在ActiveRecord迁移中有没有办法做到这一点?我试过了,没有结果。

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

我使用Rails 3.1。

2uluyalo

2uluyalo1#

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

nx7onnlm

nx7onnlm2#

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

evrscar2

evrscar23#

如果你使用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适配器中,此特性从一开始就可用,并且具有与您建议的相同的语法。
不幸的是,我还没有找到一个类似的gem或解决方案的MySQL。

qnzebej0

qnzebej04#

我不知道这个方法是什么时候引入的,但在最新的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

xcitsw88

xcitsw885#

除了change_column_comment(已经在另一个答案中提到)之外,还有change_table_comment

change_table_comment(:posts, from: "old table comment", to: "new table comment")

from:键允许您为注解创建可逆迁移。这通常意味着将其从nil更改为某个字符串。当然,你可以通过修改to: nil来删除注解。

相关问题