如何在MySQL中的Ruby哈希中存储多个电子邮件?

时间:2013-02-05 19:15:35

标签: mysql ruby-on-rails ruby hash

我在我的rails应用程序中构建了我自己的评论,没有线程,我希望能够发送回复所有通知以获得项目的新评论。将电子邮件存储到MySQL中的ruby哈希中,然后在必要时从中读取是否最好?我正在试图弄清楚如何将电子邮件插入哈希,使用我不必定义的密钥,任何帮助?

3 个答案:

答案 0 :(得分:1)

假设某些mysql表中有一些string类型的列。

使用json gem。如果您没有json gem,请按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

要获取ruby hash,请使用`JSON.parse(obj)'

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

以rails方式。在模型中你可以这样做:

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

使用秒将避免从hash转换为json,反之亦然

答案 1 :(得分:0)

在Postgres中,有一个数组扩展可用于获取实际的数组存储。不幸的是,这对MySQL不起作用。

电子邮件等数据的最佳选择是将您的电子邮件列表序列化为字符串字段,并提供提供数组访问者的合成属性(如果需要)。然后,您可以在评论中添加回调,以便在将评论添加到此项目时更新电子邮件列表。

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

这可以是使用JSON blob的一个很好的替代方法,因为它允许更容易的文本搜索和逗号分隔列表的处理。我不知道split()或JSON.parse是否在序列化性能方面提供了优势。

答案 2 :(得分:0)

根据ActiveRecord::Base,您可以serialize列:

class MyModel < ActiveRecord::Base
  serialize :emails
end

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