Tengo un modelo de Usuario. Ahora, necesito todas las asociaciones detalles de la misma desde la consola.
Y necesito saber si es un uno-uno o uno-muchos.¿Hay algún método para hacerlo?

InformationsquelleAutor shajin | 2011-05-04

5 Comentarios

  1. 40
    User.reflect_on_all_associations

    Esto devolverá un array de asociaciones similar a este:

    #<ActiveRecord::Reflection::AssociationReflection:0x00000105575548 @macro=:has_many, @name=:posts, @options={}, @active_record=User(id: integer, login: string), @collection=false>

    Código de ejemplo:

    reflections = User.reflect_on_all_associations
    reflections.each do |reflection|
      puts ":#{reflection.macro} => :#{reflection.name}"
    end
    • Gracias.Este es trabajado para mí. 😀 😀
    • Solo para aclarar, no funciona en una instancia de un modelo. Se trabaja en la clase del modelo. De hecho, quiero todos los detalles de los registros asociados, no el nivel de esquema.
  2. 2

    El uso de la gema pry-rails usted será capaz de acceder a la modelo, sus columnas y sus relaciones. Incluir en su Gemfile, a continuación, ejecutar bundle. Puede utilizar el comando show-models cuando usted está en la palanca de la consola. y usted va a obtener la información acerca de todos sus modelos.

    También puede ejecutar show-model (Model_Name) para obtener información acerca de un modelo específico

  3. 0

    Porque soy un usuario nuevo, soy incapaz de aclarar/en respuesta a otros mensajes. Voy a tenga en cuenta que usted necesita para volver a cargar la consola de rails, antes de la comprobación de los cambios en las asociaciones.

  4. 0

    Agregar este en algún lugar de en /lib. Por ejemplo clone_deep.rb.

    module CloneDeep
      def clone_deep
        kopy = clone
        self.class.reflect_on_all_associations.each do |association|
          next if association.macro == :belongs_to
          cloned_object = case association.macro
                            when :has_many
                              self.send(association.name).collect { |item| item.clone_deep }
                            when :has_one
                              self.send(association.name) && self.send(association.name).clone_deep
                            else
                              clone
                          end
          kopy.send("#{association.name}=", cloned_object)
        end
        return kopy
      end
    end

    Crear nuevos inicializador config/inicializadores/carpeta. Dentro de este archivo pegar

    ActiveRecord::Base.send(:include, CloneDeep)

    Ahora podrás clonar el modelo con todos es has_one y hos_many asociaciones.

    cloned_person = person.clone_deep
    cloned_person.save
  5. 0

    Usted puede hacer esto para cualquier particular :-
    usuario = Usuario.reflect_on_association(:perfildeusuario)
    y
    usuario.macro

Dejar respuesta

Please enter your comment!
Please enter your name here