Mysql
 sql >> Database >  >> RDS >> Mysql

Come creare/mantenere il campo ID in Sequel Pro tramite Ruby e mysql2

Ok, credo di averlo finalmente capito.

"Dato che il valore id viene creato da MySQL, vorrei impostare/creare/mantenere il campo id in ruby ​​in modo che puts dog.id non sarà una stringa vuota."

=> perché il valore id viene assegnato automaticamente in MySQL Ruby non ha modo di sapere quale sia quel valore id e quindi chiamando dog.id restituirà una stringa vuota.

=> Ho bisogno di trovare un modo per mappare il valore dell'id di un oggetto in ruby ​​in modo tale che sia lo stesso dell'id assegnato automaticamente all'oggetto quando lo inserisco nel database MySQL.

=> Presta attenzione all'istruzione utilizzata per creare i cani da tavola:

CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);

si traduce in ogni cane creato ha un ID (che gli viene assegnato automaticamente), un nome e un colore. Esistono due approcci per pensare all'archiviazione delle informazioni sugli oggetti di un cane:

dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }

dog = [1, "simba", "grey"]

In genere mi piace usare gli array per memorizzare informazioni, ma questa volta ho usato un hash (perché quando chiamo .inspect on dog (non Dog) il risultato è qualcosa del genere:

#<Dog:0x007fbf74c55068 @name="samba", @color="grey">

il che mi fa pensare a una struttura di dati hash:

{ "id"=> 1, "name"=>"simba", "color"=>"grey"}

In Ruby, faccio questo:

def row_hash(hash)
  hash={}
  Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end

Dove hash_row si riferisce alla riga che contiene l'attributo di ogni oggetto cane. Questo fondamentalmente fa sapere a Ruby che ogni volta che istanzia una nuova istanza della classe Dog dovrebbe attingere a quell'istanza e mappare hash[id] su "id".

In questo modo posso accedere al valore di "id" in ruby.

PS:Mi è appena venuto in mente. Probabilmente modificherò questa risposta dopo che sarà filtrata per un po'.