sql >> Base de Datos >  >> RDS >> Mysql

Cómo crear/mantener el campo ID en Sequel Pro a través de Ruby y mysql2

Bueno, creo que finalmente me di cuenta de esto.

"Dado que MySQL crea el valor de identificación, me gustaría establecer/crear/mantener el campo de identificación en Ruby para que puts dog.id no será una cadena vacía".

=> porque el valor de identificación se asigna automáticamente en MySQL, Ruby no tiene forma de saber cuál es ese valor de identificación y, por lo tanto, llamar a dog.id devolverá una cadena vacía.

=> Necesito encontrar una manera de asignar el valor de identificación de un objeto en Ruby de modo que sea el mismo que la identificación asignada automáticamente al objeto cuando lo inserto en la base de datos MySQL.

=> Preste atención a la declaración utilizada para crear Table dogs:

CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);

se traduce en que cada perro creado tiene una identificación (que se le asigna automáticamente), un nombre y un color. Hay dos enfoques para pensar en el almacenamiento de la información de los objetos de un perro:

dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }

dog = [1, "simba", "grey"]

Por lo general, me gusta usar matrices para almacenar información, pero esta vez usé un hash (porque cuando llamo a .inspect on dog (no Dog) el resultado es algo como esto:

#<Dog:0x007fbf74c55068 @name="samba", @color="grey">

lo que me hace pensar en una estructura de datos hash:

{ "id"=> 1, "name"=>"simba", "color"=>"grey"}

En Ruby, hago esto:

def row_hash(hash)
  hash={}
  Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end

Donde hash_row se refiere a la fila que contiene el atributo de cada objeto perro. Básicamente, esto le permite a Ruby saber que cada vez que instancia una nueva instancia de la clase Perro, debe aprovechar esa instancia y asignar hash[id] a "id".

Hacer esto me permite acceder al valor de "id" en ruby.

PD:Esto se me acaba de ocurrir. Probablemente editaré esta respuesta después de que se filtre por un tiempo.