我有一个带有“内容”字段的“电子邮件”表,其中数据存储为哈希对象。我想在此表中使用参数“email => a5his@gmail.com”进行搜索,其中:email是密钥,“a5his@gmail.com”是哈希对象的值。
提前致谢
答案 0 :(得分:1)
这种搜索效率极低。如果您计划对电子邮件进行大量搜索,那么添加索引列以将电子邮件存储在表中可能是明智的。
我假设contents
是一个存储序列化哈希的文本字段。散列使用YAML格式序列化,格式为纯文本格式。因此,您可以在content
列上执行常规外卡搜索。
例如: 哈希如下所示
{"email" => "a5his@gmail.com"}
被序列化为字符串
"--- \nemail: a5his@gmail.com\n"
所以你可以写一个简单的匹配器如下:
Email.all(:conditions => ["content LIKE ? ", "%email: #{email}%"])
如果您计划查询几个动态字段,那么
class Email < ActiveRecord::Base
def self.find_all_by_dynamic(hash)
ca = hash.map {|k, v| ["contents LIKE ?", "%#{k}: #{v}%"]}.transpose
Email.all(:conditions => [ca[0].join(" AND "), *ca[1]])
end
end
现在您可以将新方法用作:
Email.find_all_by_dynamic(:email => "5his@gmail.com", :zip => 94307)