Oke, saya percaya saya akhirnya menemukan ini.
"Karena nilai id sedang dibuat oleh MySQL, saya ingin mengatur/membuat/mempertahankan bidang id di ruby sehingga puts dog.id
tidak akan menjadi string kosong."
=> karena nilai id ditetapkan secara otomatis di MySQL Ruby tidak memiliki cara untuk mengetahui nilai id itu dan oleh karena itu memanggil dog.id akan mengembalikan string kosong.
=> Saya perlu menemukan cara untuk memetakan nilai id objek di Ruby sehingga sama dengan id yang secara otomatis ditetapkan ke objek ketika saya memasukkannya ke dalam database MySQL.
=> Perhatikan pernyataan yang digunakan untuk membuat Table dogs:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
itu diterjemahkan ke setiap anjing membuat memiliki id (yang secara otomatis ditetapkan untuk itu), nama, dan warna. Ada dua pendekatan untuk memikirkan penyimpanan informasi objek anjing:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
Saya biasanya suka menggunakan array untuk menyimpan informasi tetapi kali ini saya menggunakan hash (karena ketika saya memanggil .inspect pada anjing (bukan Anjing) hasilnya seperti ini:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
yang membuat saya berpikir tentang struktur data hash:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
Di Ruby, saya melakukan ini:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
Di mana hash_row mengacu pada baris yang menyimpan atribut setiap objek anjing. Ini pada dasarnya membuat Ruby tahu bahwa setiap kali membuat instance baru dari kelas Dog, ia harus memanfaatkan instance tersebut dan memetakan hash[id] ke "id".
Melakukan ini memungkinkan saya untuk mengakses nilai "id" di Ruby.
PS:Ini baru terpikir oleh saya. Saya mungkin akan mengedit jawaban ini setelah meresap sebentar.