Okay, ich glaube, ich habe das endlich herausgefunden.
„Da der ID-Wert von MySQL erstellt wird, möchte ich das ID-Feld in Ruby so setzen/erstellen/pflegen, dass puts dog.id
setzt wird kein leerer String sein."
=> Da der ID-Wert in MySQL automatisch zugewiesen wird, hat Ruby keine Möglichkeit zu wissen, was dieser ID-Wert ist, und daher wird der Aufruf von dog.id einen leeren String zurückgeben.
=> Ich muss einen Weg finden, den ID-Wert eines Objekts in Ruby so abzubilden, dass er der ID entspricht, die dem Objekt automatisch zugewiesen wird, wenn ich es in die MySQL-Datenbank einfüge.
=> Beachten Sie die Anweisung, die zum Erstellen von Tischhunden verwendet wird:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
Es bedeutet, dass jeder erstellte Hund eine ID (die ihm automatisch zugewiesen wird), einen Namen und eine Farbe hat. Es gibt zwei Herangehensweisen an die Speicherung der Informationen eines Hundeobjekts:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
Normalerweise verwende ich gerne Arrays, um Informationen zu speichern, aber dieses Mal habe ich einen Hash verwendet (denn wenn ich .inspect für Hund (nicht Hund) aufrufe, ist das Ergebnis etwa so:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
was mich an eine Hash-Datenstruktur denken lässt:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
In Ruby mache ich das:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
Dabei bezieht sich hash_row auf die Zeile, die das Attribut jedes Hundeobjekts enthält. Dies lässt Ruby im Grunde wissen, dass es jedes Mal, wenn es eine neue Instanz der Klasse Dog instanziiert, auf diese Instanziierung zugreifen und hash[id] auf „id“ abbilden soll.
Dadurch kann ich auf den Wert von "id" in Ruby zugreifen.
PS:Das ist mir gerade eingefallen. Ich werde diese Antwort wahrscheinlich bearbeiten, nachdem sie eine Weile durchgesickert ist.