Добре, вярвам, че най-накрая разбрах това.
„Тъй като стойността на id се създава от MySQL, бих искал да задам/създам/поддържа полето id в ruby, така че puts dog.id
няма да бъде празен низ."
=> тъй като id стойността се присвоява автоматично в MySQL, Ruby няма начин да разбере каква е тази id стойност и следователно извикването на dog.id ще върне празен низ.
=> Трябва да намеря начин да картографирам стойността на идентификатора на обекта в ruby, така че да е същият като идентификатора, автоматично присвоен на обекта, когато го вмъкна в MySQL база данни.
=> Обърнете внимание на израза, използван за създаване на Table dogs:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);
това означава, че всяко създадено куче има идентификатор (който му се присвоява автоматично), име и цвят. Има два подхода към мисленето за съхранението на информация за обекти на куче:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }
dog = [1, "simba", "grey"]
Обикновено обичам да използвам масиви за съхраняване на информация, но този път използвах хеш (защото, когато извикам .inspect на куче (не на куче), резултатът е нещо подобно:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">
което ме кара да мисля за хеш структура от данни:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}
В Ruby правя това:
def row_hash(hash)
hash={}
Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end
Където hash_row се отнася до реда, който съдържа атрибута на всеки обект куче. Това основно позволява на Ruby да знае, че всеки път, когато създава нов екземпляр на класа Dog, той трябва да използва този екземпляр и да съпостави hash[id] на "id".
Това ми позволява да получа достъп до стойността на "id" в ruby.
PS:Това току-що ми хрумна. Вероятно ще редактирам този отговор, след като се просмуква известно време.