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