0

I built my own comments in my rails app without threading and I want to be able to send reply all notifications for new comments on a project. Would it be best to just store emails into a ruby hash in MySQL and then read from it when necessary? I'm trying to figure out how to insert emails into a hash with keys I don't have to define, any help?

4

3 回答 3

1

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

使用json宝石。如果你没有jsongem 安装它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​​ 哈希,请使用 `JSON.parse(obj)'

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

或者

以铁轨方式。在模型中,您可以这样做:

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

使用 second 将避免从hashto转换,json反之亦然

于 2013-02-05T19:23:09.493 回答
0

根据ActiveRecord::Base你可以serialize一栏:

class MyModel < ActiveRecord::Base
  serialize :emails
end

User.create(:emails => %w( email1@a.com email2@b.com email3@c.com )
于 2013-02-05T19:37:29.450 回答
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 是否在序列化性能方面提供优势。

于 2013-02-05T19:29:53.063 回答