Dobře, věřím, že jsem na to konečně přišel.
"Vzhledem k tomu, že hodnotu id vytváří MySQL, chtěl bych nastavit/vytvořit/udržovat pole id v ruby tak, aby puts dog.id
nebude prázdný řetězec."
=> protože hodnota id je automaticky přiřazena v MySQL, Ruby nemá žádný způsob, jak zjistit, jaká je tato hodnota, a proto volání dog.id vrátí prázdný řetězec.
=> Potřebuji najít způsob, jak namapovat hodnotu id objektů v ruby tak, aby byla stejná jako id automaticky přiřazená objektu, když jej vložím do databáze MySQL.
=> Věnujte pozornost prohlášení použitému k vytvoření Table dogs:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
překládá se, že každý psí výtvor má id (které je mu automaticky přiřazeno), jméno a barvu. Existují dva přístupy k uvažování o ukládání informací o psích objektech:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
Obvykle rád používám pole k ukládání informací, ale tentokrát jsem použil hash (protože když zavolám .inspect on dog (ne Dog), výsledek je něco takového:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
což mě nutí přemýšlet o struktuře hash dat:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
V Ruby dělám toto:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
Kde hash_row odkazuje na řádek, který obsahuje atribut každého objektu psa. To v podstatě dává Ruby vědět, že pokaždé, když vytvoří novou instanci třídy Dog, měla by se na tuto instanci napojit a namapovat hash[id] na "id".
To mi umožní přístup k hodnotě "id" v ruby.
PS:To mě právě napadlo. Pravděpodobně tuto odpověď upravím poté, co bude chvíli prosakovat.