Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como criar/manter o campo ID no Sequel Pro via Ruby e mysql2


Ok, eu acredito que finalmente descobri isso.

"Como o valor id está sendo criado pelo MySQL, gostaria de definir/criar/manter o campo id em ruby ​​para que puts dog.id não será uma string vazia."

=> porque o valor do id é atribuído automaticamente no MySQL, Ruby não tem como saber qual é o valor desse id e, portanto, chamar dog.id retornará uma string vazia.

=> Preciso encontrar uma maneira de mapear o valor de id de um objeto em ruby ​​de forma que seja o mesmo que o id atribuído automaticamente ao objeto quando o insiro no banco de dados MySQL.

=> Preste atenção no comando usado para criar os Table dogs:
CREATE TABLE dogs(
id INT PRIMARY KEY AUTO_INCREMENT,
name TEXT,
color TEXT
);

ele traduz para cada criação de cachorro tem um id (que é automaticamente atribuído a ele), um nome e uma cor. Existem duas abordagens para pensar no armazenamento das informações de um objeto cão:
dog = { "id" => 'some integer', "name" => "simba", "color" => "grey" }

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

Normalmente, gosto de usar arrays para armazenar informações, mas desta vez usei um hash (porque quando chamo .inspect on dog (não Dog) o resultado é algo assim:
#<Dog:0x007fbf74c55068 @name="samba", @color="grey">

o que me faz pensar em uma estrutura de dados hash:
{ "id"=> 1, "name"=>"simba", "color"=>"grey"}

Em Ruby, eu faço isso:
def row_hash(hash)
  hash={}
  Dog.new(hash[name], hash[color]).tap { |id| id = hash[id] }
end

Onde hash_row se refere à linha que contém o atributo de cada objeto dog. Isso basicamente permite que o Ruby saiba que cada vez que instanciar uma nova instância da classe Dog, ele deve acessar essa instanciação e mapear hash[id] para "id".

Fazer isso me permite acessar o valor de "id" em ruby.

PS:Isso acabou de me ocorrer. Provavelmente editarei esta resposta depois que ela se infiltrar por um tempo.