/ / Como armazenar vários e-mails em hash Ruby no MySQL? - mysql, ruby-on-rails, ruby, hash

Como armazenar vários e-mails no hash do Ruby no MySQL? - mysql, ruby-on-rails, ruby, hash

Eu construí meus próprios comentários em meu aplicativo Rails semthreading e quero poder enviar resposta a todas as notificações de novos comentários em um projeto. Seria melhor apenas armazenar e-mails em um hash ruby ​​no MySQL e, em seguida, lê-lo quando necessário? Estou tentando descobrir como inserir e-mails em um hash com chaves que não preciso definir. Alguma ajuda?

Respostas:

1 para resposta № 1

Supondo que você tenha alguma coluna com string digite alguma tabela mysql.

Usar json gema. Se você não tem json instale-o por gem install json.

require "json"
reply_emails_list = ["a@gmail.com", "b@gamil.com"]
obj.column_name = {:emails => reply_emails_list}.to_json  #storing ruby hash as string in mysql

Para obter o hash ruby ​​de volta, use `JSON.parse (obj)"

emails_list = JSON.parse(obj.column_name)  #ruby hash

ou

Em caminho de trilhos. No modelo, você pode fazer assim:

YourModel < ActiveRecord::Base
serialize :column_name, Array  #If don"t want hash
serialize :column_name     #you can store key value pair as I shown above
end

Usar o segundo evitará a conversão de hash para json e vice versa


0 para resposta № 2

No Postgres, há uma extensão de array que você pode usar para obter o armazenamento de array real. Infelizmente, isso não funciona para o MySQL.

A melhor coisa para dados como e-mails seriaserializar sua lista de emails como um campo String e fornecer um atributo sintético que fornece um acessador de array (se necessário). Você pode então colocar chamadas de retorno em seu comentário para atualizar a lista de e-mail quando Comentários forem adicionados a este projeto.

class Project < ActiveRecord::Base
# db String field email_list
attr_accessor :emails

def emails
email_list.split(",")
end

def emails=(email_ary)
self.email_list = email_ary.join(",")
end
end

Esta pode ser uma boa alternativa ao uso de um JSONblob, pois permite uma pesquisa de texto mais fácil e o manuseio de uma lista separada por vírgulas. Não sei se split () ou JSON.parse oferecem uma vantagem em termos de desempenho de serialização.


0 para resposta № 3

De acordo com ActiveRecord::Base você pode serialize uma coluna:

class MyModel < ActiveRecord::Base
serialize :emails
end

User.create(:emails => %w( email1@a.com email2@b.com email3@c.com )