es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo personalizar el generador de ORM de Rails.

Quiero agregar el campo uuid a todas las tablas que estoy generando, pero quiero mantener el campo id como clave primaria.

También quiero mantener el código mínimo en mi lado para que cuando el generador ORM cambie, pueda detectar los cambios.

¿Alguna idea de cómo hacerlo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para agregar un campo uuid a todas las tablas sin cambiar la clave primaria id, puedes modificar el archivo de plantilla de generador para las migraciones.

    Primero, crea un archivo de plantilla de generador personalizado ejecutando el siguiente comando:

    rails g generator CustomOrmGenerator -c migrations
    

    Luego, crea un nuevo archivo de plantilla en lib/templates/active_record/migration.rb con el siguiente código:

    class ActiveRecord::Generators::CustomOrmGenerator < ActiveRecord::Generators::MigrationGenerator
      source_root File.expand_path('../templates', __FILE__)
    
      # define uuid field method
      def uuid(field_name)
        field field_name, :uuid, default: 'gen_random_uuid()', null: false
      end
    
      # override create_table, calling uuid for each generated table
      def create_table_migration
        create_table_migration_methods.each do |method| 
          uuid(method.args.first) if method.name == :create_table
          say_status :create, "#{table_name} (custom)"
          migration_template "#{method.name}.rb", "db/migrate/custom_#{method.name}_for_#{table_name}.rb", migration_version: migration_version
        end
      end
    
    end
    

    Este código define un método uuid que agrega el campo uuid con un valor predeterminado y restricción de no nulo. Sobrescribe el método create_table_migration de la clase MigrationGenerator, llamando al método uuid para cada tabla generada por el método create_table.

    Para usar el generador personalizado, ejecuta el siguiente comando:

    rails g migration create_table_name field1:type field2:type --generator=custom_orm
    

    Esto generará un archivo de migración con el campo uuid agregado a la tabla, manteniendo intacta la clave primaria id.

    Con este enfoque, cualquier cambio en el generador de migraciones predeterminado será automáticamente recogido por el generador personalizado, y el método uuid puede ser utilizado para cualquier nuevo campo que necesite ser agregado a tablas existentes.

Comments are closed.