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.