Могу ли я добавить комментарии к таблице или столбцу с помощью миграции ActiveRecord?

В MySQL (и других базах данных SQL) может быть полезно добавлять комментарии к таблице или столбцу, назначение которых может быть неясным. (Поищите MySQL в синтаксисе создания таблицы для слова "комментарий" для Примеры.)

Есть ли способ сделать это в ActiveRecord Migration? Я пробовал это без каких-либо результатов.

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

Я использую Рельсы 3.1.


person Nathan Long    schedule 08.11.2011    source источник
comment
Недавно я написал гем migration_comments, который сделает то, что вам нужно. Долго не тестировался в бою, но буду рад любым отзывам...   -  person PinnyM    schedule 13.04.2012
comment
@PinnyM - Наконец-то попробовал. Потрясающий! Спасибо за выпуск.   -  person Nathan Long    schedule 02.03.2013


Ответы (4)


Гем migration_comments, упомянутый в комментарии к исходному вопросу, кажется лучшим решением для кросс-базы данных для этой потребности. . В дополнение к поддержке миграции для добавления комментариев к таблицам и столбцам, гем также аннотирует файл schema.rb, чтобы включить все комментарии. Идеально подходит для нужд моей компании (большое устаревшее приложение rails, в котором модель базы данных неоднозначна и также используется командой аналитиков, пишущих собственные отчеты SQL).

person QuarkleMotion    schedule 01.03.2013
comment
Стоит отметить, что комментарии запекаются в Rails 5, поэтому гем не нужен. ср. модификатор комментария edgeguides.rubyonrails.org/ - person Jerome Dalbert; 28.07.2016
comment
В последних версиях рельсов можно использовать change_column_comment, как объяснено в моем ответе stackoverflow.com/a/60584476/3090068 - person Yuki Inoue; 08.03.2020

В 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 в качестве третьего параметра.

person Sergio Belevskij    schedule 05.03.2019
comment
В последних версиях рельсов можно использовать change_column_comment, как объяснено в моем ответе stackoverflow.com/a/60584476/3090068 - person Yuki Inoue; 08.03.2020

Существует гем под названием pg_comment, который добавит эту функциональность, если вы используете postgresql.

Драгоценный камень добавляет дополнительные команды для добавления комментариев. Обратите внимание, что синтаксис в 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.

person nathanvda    schedule 08.11.2011
comment
Это для MySQL, но оно не обновлялось 4 года: github.com/openrain/activerecord -комментарии - person Nathan Long; 26.10.2012

Я не знаю, когда появился этот метод, но в последних версиях рельсов (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

person Yuki Inoue    schedule 08.03.2020