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?
问问题
355 次
3 回答
1
假设您string
在某个 mysql 表中有一些类型的列。
使用json
宝石。如果你没有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 哈希,请使用 `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 将避免从hash
to转换,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 回答