2016-05-19 10 views
1

rakeを使っている間、データベース自体やテーブルなどのオブジェクトにコメントを追加したいと思います。私はrake db:createを発行すると例えば、私が(アダプタが直接これをサポートしていない場合)、自動的に私はActiveRecordのための同様の現象が欲しいrails/rakeを持つオブジェクトにPostgreSQLのコメントを追加するには?

COMMENT ON DATABASE myapp_development IS 'Rails DB for project at c:/some/path/myapp/'; 

のように、PostgreSQLの拡張SQL文を経由して、コメントを追加したいです::可能であれば、テーブルと列の移行(RDocを抽出することによって)

これは、すばやく実行できるものではなく、機能リクエストのようなものです。これはすでに可能ですか?どうすればいいですか?

答えて

1

必要な場所で生のSQLを実行するだけで済みます。あなたが必要な場合は、変数の値が含まれるように、文字列の補間(例えば"#{value}")を使用することができます

sql = "COMMENT ON DATABASE myapp_development IS 'Rails DB for project at c:/some/path/myapp/';" 
records_array = ActiveRecord::Base.connection.execute(sql) 

注:これを試してみてください。あなたはRubyの豊かな表現力と必要なネイティブSQLを実行する能力を備えています。

MigrationComments gemは、移行オブジェクトに関するコメントのインラインサポートを提供します。それをインストールするには、単にあなたのGemfileにこれを追加します。

def self.up 
    create_table :users, comment: "User records are stored in this table." do |t| 
    t.string :canonical_email, comment: "This column contains the email address that has been URL decoded and lowercased, to ensure system-wide uniqueness" 
    end 
end 

とスタンドアロンコメントの変更:

def self.up 
    change_table :users do |t| 
    t.comment "User records are stored in this table." 
    t.change_comment :canonical_email, "This column contains the email address that has been URL decoded and lowercased, to ensure system-wide uniqueness" 
    end 
end 

あなたは見つけることができます

gem 'migration_comments' 

インストールが完了したら、あなたは、インラインコメントの両方を含むことができ、 PgCommentの宝石で、ActiveRecordのような構文でコメントを付けることができます。単にあなたのGemfileにこれを追加します。

gem 'pg_comment' 

そして、あなたはこのようなクールなものを行うことができます:

set_table_comment :users, "User records are stored in this table." 
set_column_comment(:users, :canonical_email, "This column contains the email address that has been URL decoded and lowercased, to ensure system-wide uniqueness") 

は残念ながら、宝石、そのデータベースのコメント(およびその他のサポートされていないのいずれかとはset_database_commentはありませんPostgresオブジェクト)では、答えの先頭に表示されている生のSQLソリューションを使用する必要があります。

+0

で、Rails template fileから、例えば、./lib/tasks/annotate_db.rakeを作成することができますか? – mlt

+0

大きな質問です。あなたは実際に移行の中から便利にそれを行うことができます。したがって、最初の移行ではデータベースにコメントを付けてからテーブルを作成することができます。 –

+0

Uhm!それは働くことができます。しかし、手動で移行するたびにそのようなコードを追加するのはあまりにも冗長なようです。むしろそれが可能ならば、私はむしろそれを宝石に包んで、移行のために夢中にしたいと思うだろう。 – mlt

1

私は思ったよりも簡単です。 create`:一つは、私は `すくいデシベルからトリガされるように、このすべてを入れてください、次の内容

namespace :db do 
    def update_db_comment 
    Rails.configuration.database_configuration.each do |key, hash| 
     db = hash['database'] 
     if not db.nil? 
     sql = "COMMENT ON DATABASE #{db} IS 'Rails #{Rails::VERSION::STRING} #{key} DB for project at #{Rails.root} on #{Socket.gethostbyname(Socket.gethostname).first}';" 
     # puts sql 
     records_array = ActiveRecord::Base.connection.execute(sql) 
     end 
    end 
    end 

    task :create do 
    update_db_comment 
    end 
end 

# Rake::Task['db:create'].enhance(['db:set_db_comment']) 
関連する問題