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 № 1Supondo 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 )