Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment créer/maintenir le champ ID dans Sequel Pro via Ruby et mysql2

Bon, je crois que j'ai enfin compris.

"Étant donné que la valeur id est créée par MySQL, je voudrais définir/créer/maintenir le champ id en ruby ​​afin que puts dog.id ne sera pas une chaîne vide."

=> parce que la valeur id est automatiquement attribuée dans MySQL Ruby n'a aucun moyen de savoir quelle est cette valeur id et donc appeler dog.id renverra une chaîne vide.

=> J'ai besoin de trouver un moyen de mapper la valeur d'identifiant d'un objet en ruby ​​de sorte qu'elle soit identique à l'identifiant automatiquement attribué à l'objet lorsque je l'insère dans la base de données MySQL.

=> Faites attention à la déclaration utilisée pour créer des chiens de table :

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

cela signifie que chaque chien créé a un identifiant (qui lui est automatiquement attribué), un nom et une couleur. Il existe deux approches pour penser au stockage des informations d'un objet chien :

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

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

J'aime généralement utiliser des tableaux pour stocker des informations, mais cette fois-ci, j'ai utilisé un hachage (parce que lorsque j'appelle .inspect on dog (pas Dog), le résultat ressemble à ceci :

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

ce qui me fait penser à une structure de données de hachage :

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

En Ruby, je fais ceci :

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

Où hash_row fait référence à la ligne qui contient l'attribut de chaque objet chien. Cela permet essentiellement à Ruby de savoir que chaque fois qu'il instancie une nouvelle instance de la classe Dog, il doit puiser dans cette instanciation et mapper hash[id] sur "id".

Cela me permet d'accéder à la valeur de "id" dans ruby.

PS :Cela vient de me venir à l'esprit. Je vais probablement modifier cette réponse après qu'elle ait percolé pendant un certain temps.