【发布时间】:2010-10-08 03:59:02
【问题描述】:
我有一个表“电子邮件”,其中的数据存储为哈希对象。我想使用参数“email => a5his@gmail.com”在此表中进行搜索,其中:email 是键,“a5his@gmail.com”是哈希对象的值。
提前致谢
【问题讨论】:
标签: ruby-on-rails search activerecord hash
我有一个表“电子邮件”,其中的数据存储为哈希对象。我想使用参数“email => a5his@gmail.com”在此表中进行搜索,其中:email 是键,“a5his@gmail.com”是哈希对象的值。
提前致谢
【问题讨论】:
标签: ruby-on-rails search activerecord hash
此搜索效率极低。如果您打算对电子邮件进行大量搜索,最好添加一个索引列来将电子邮件存储在您的表中。
我假设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)
【讨论】: