Okay, jeg tror jeg endelig fandt ud af det.
"Da id-værdien oprettes af MySQL, vil jeg gerne indstille/oprette/vedligeholde id-feltet i ruby, så puts dog.id
vil ikke være en tom streng."
=> fordi id-værdien automatisk tildeles i MySQL Ruby har ingen mulighed for at vide, hvad denne id-værdi er, og derfor vil et kald på dog.id returnere en tom streng.
=> Jeg skal finde en måde at kortlægge et objekts id-værdi i ruby, så det er det samme som det id, der automatisk tildeles objektet, når jeg indsætter det i MySQL-databasen.
=> Vær opmærksom på den erklæring, der bruges til at oprette bordhunde:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
det oversættes til, at hver hund oprette har et id (som automatisk tildeles den), et navn og en farve. Der er to tilgange til at tænke på opbevaring af hundegenstandes information:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
Jeg kan typisk godt lide at bruge arrays til at gemme information, men denne gang brugte jeg en hash (fordi når jeg kalder .inspect på hund (ikke Dog) er resultatet noget som dette:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
hvilket får mig til at tænke på en hash-datastruktur:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
I Ruby gør jeg dette:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
Hvor hash_row refererer til den række, der indeholder hvert hundeobjekts attribut. Dette lader i bund og grund Ruby vide, at hver gang den instansierer en ny instans af klassen Dog, skal den benytte denne instansiering og kortlægge hash[id] til "id".
Ved at gøre dette får jeg adgang til værdien af "id" i rubin.
PS:Dette faldt mig lige ind. Jeg vil sandsynligvis redigere dette svar, når det har sivet i et stykke tid.