2010-09-02 3 views
6

Ich möchte COMMENT, das Teil des SQL-Befehls ist, in meine Migrationsdateien einfügen.Jedes Rails-Plugin, um Kommentare zu jeder Spalte in ActiveRecord-Migrationsdateien hinzuzufügen?

As far as I know, I can add COMMENT to each table and column.

Ich kann nicht ein Plugin Namen erinnern, die mich wie folgt schreiben lässt:

t.string :name, :comment => "A user's fullname" 
    t.string :label, :comment => "name of color" 
    t.text :value, :comment => "self intro" 
    t.integer :position, :comment => "1 is left, 2 is right" 

Und diese Aussage auf magische Weise in SQL, die wie

create table test (
    name varchar(255) not null COMMENT 'blahblah', 
    label varchar(255) null COMMENT 'hahaha' 
    text varchar(255) not null, 
    position int(11) 
); 
ist übersetzt

Kennt jemand den Plug-in-Namen?


  • Ich bin nicht auf der Suche nach Annotate Models plugins von Dave Thomas. Was ich unter Kommentaren verstehe, sind MySQL-Anfragen.

Antwort

5

Ich weiß nicht von jedem Plugin, das wird, was Sie fordern. Sie könnte in der Lage sein zu hacken, in was Sie wollen, indem Sie ActiveRecord::ConnectionAdapters::ColumnDefinition betrachten. (Siehe active_record/connection_adapters/abstract/schema_definitions.rb.)

Wie Sie die Struct definiert die verschiedenen Spaltenoptionen sehen (wie :limit und :default.) Sie erweitert konnte, dass Struktur mit einem :comment und dann #to_sql modifizieren, um die erforderlichen SQL zu generieren. Sie müssten auch TableDefinition#column ändern, um das Attribut :comment festzulegen.

Folgendes wurde getestet und funktioniert (für MySQL):

module ActiveRecord 
    module ConnectionAdapters 
    class ColumnDefinition 
     attr_accessor :comment 

     def to_sql_with_comment 
     column_sql = to_sql_without_comment 
     return column_sql if comment.nil? 
     "#{column_sql} COMMENT '#{base.quote_string(comment)}'" 
     end 

     alias_method_chain :to_sql, :comment 
    end 

    class TableDefinition 
     # Completely replaces (and duplicates the existing code, but there's 
     # no place to really hook into the middle of this.) 
     def column(name, type, options = {}) 
     column = self[name] || ColumnDefinition.new(@base, name, type) 
     if options[:limit] 
      column.limit = options[:limit] 
     elsif native[type.to_sym].is_a?(Hash) 
      column.limit = native[type.to_sym][:limit] 
     end 
     column.precision = options[:precision] 
     column.scale = options[:scale] 
     column.default = options[:default] 
     column.null = options[:null] 
     column.comment = options[:comment] 
     @columns << column unless @columns.include? column 
     self 
     end 
    end 
    end 
end 
+0

Danke! Deine Antwort ist erstaunlich. Ich habe Ihren Code auch nicht getestet. Aber ich werde deinen Ansatz nehmen. –

+0

Es scheint, dass der Code nicht funktioniert. –

+0

Welcher Teil funktioniert nicht? Haben Sie eine Protokollierung hinzugefügt, um zu sehen, ob die Methoden aufgerufen werden? – rjk

6

Shameless Plug - gibt es jetzt eine 'migration_comments' Juwel, das zur Kommentierung MySQL, SQLite funktioniert und PostgreSQL. Es unterstützt derzeit Rails 2.3 und höher. Es funktioniert auch zusammen mit dem annotate Juwel (v2.5.0 oder höher), um diese Kommentare in Ihren Model/Fixture/Spec-Dateien zu generieren.

+0

großartig! Ich bevorzuge Edelsteine, um den Code für meinen eigenen zu schreiben. –

1

Nach einem Fehler beim Abrufen von migration_comments gem für Oracle, habe ich Folgendes mit activerecord -v 4.1.1 versucht und der Kommentar wurde korrekt hinzugefügt. Also keine Notwendigkeit für zusätzliche Edelsteine.

ActiveRecord::Schema.define do 
    create_table TABLENAME do |table| 
     table.column :status, :integer, :comment => "Keeps status for this signal" 
     table.column :rowversion, :integer, :comment => "Increments with each change of this record" 
     etc.. 
    end 
    end 
0

Mit Rails 5 können Sie Kommentare direkt zu Ihrer Migration hinzufügen, ohne ein Plugin zu verwenden.

Sie können Kommentare für Tabelle, Spalte und Index hinzufügen.

Sie können diese Kommentare in schema.rb plus von DBA-Tool anzeigen.

Beispiel:

class CreateProducts < ActiveRecord::Migration[5.0] 
    def change 
    create_table :products, comment: 'Products table' do |t| 
     t.string :name, comment: 'Name of the product' 
     t.string :barcode, comment: 'Barcode of the product' 
     t.string :description, comment: 'Product details' 
     t.float :msrp, comment: 'Maximum Retail Price' 
     t.float :our_price, comment: 'Selling price' 

     t.timestamps 
    end 

    add_index :products, :name, name: 'index_products_on_name', unique: true, comment: 'Index used to lookup product by name.' 
    end 
end 

Hinweis: Dies ist nur für PostgreSQL und MySQL unterstützt.

Verwandte Themen