[Ror-es] Ampliando ActiveRecord::Migration y cómo escribir en schema.rb

Fernando Guillen fguillen.mail at gmail.com
Sat Jun 27 02:32:56 GMT 2009


Pues no estoy encontrando una salida.. por lo menos no una sencilla.

Como bien dice alarkspur ( lo he escrito bien? ) a través de la task
db:schema:dump llegamos a:

ActiveRecord::SchemaDumper.dump()

Y a de aquí a ActiveRecord::SchemaDumper.new.dump() y de aquí a:

SchemaDumper#tables y de aquí a SchemaDumper#indexes:

      def indexes(table, stream)
        if (indexes = @connection.indexes(table)).any?
          add_index_statements = indexes.map do |index|
            statment_parts = [ ('add_index ' + index.table.inspect) ]
            statment_parts << index.columns.inspect
            statment_parts << (':name => ' + index.name.inspect)
            statment_parts << ':unique => true' if index.unique

            '  ' + statment_parts.join(', ')
          end

          stream.puts add_index_statements.sort.join("\n")
          stream.puts
        end
      end

Los índices normales (no claves foráneas) se imprimen en el schema.rb
con el código de arriba.

Si quiero que se impriman también los de clave foránea debería hacer
un método parecido a éste... pero éste lo tiene fácil porque en el
objeto 'index' tiene todo lo que necesita:

    class IndexDefinition < Struct.new(:table, :name, :unique,
:columns) #:nodoc:
    end

Pero yo no :/.. se me ocurre que habría que ampliar esta estructura
para almacenar la tabla destino y el campo del índice.. además de un
hueco para diferenciar un tipo de índice de otro.. y luego mirar a ver
cómo se cargan las instancias de esta clase para cargar también mis
datos..

En fín.. creo que hay demasiada gente.. el tiro no está claro

Si se os ocurre algo comentarlo a ver

Saludos

f.

-- 
Fernando Guillén
Desarrollador Web Freelance
http://www.fernandoguillen.info
http://spainrb.org/fernando-guillen


More information about the Ror-es mailing list